diff --git a/bridge/cmd/guardiand/p2p.go b/bridge/cmd/guardiand/p2p.go index 7e52f7a4..bb91c489 100644 --- a/bridge/cmd/guardiand/p2p.go +++ b/bridge/cmd/guardiand/p2p.go @@ -48,53 +48,53 @@ func p2p(obsvC chan *gossipv1.LockupObservation, sendC chan []byte) func(ctx con var idht *dht.IpfsDHT -h, err := libp2p.New(ctx, - // Use the keypair we generated - libp2p.Identity(priv), + h, err := libp2p.New(ctx, + // Use the keypair we generated + libp2p.Identity(priv), - // Multiple listen addresses - libp2p.ListenAddrStrings( - // Listen on QUIC only. - // TODO(leo): is this more or less stable than using both TCP and QUIC transports? - // https://github.com/libp2p/go-libp2p/issues/688 - fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", *p2pPort), - fmt.Sprintf("/ip6/::/udp/%d/quic", *p2pPort), - ), + // Multiple listen addresses + libp2p.ListenAddrStrings( + // Listen on QUIC only. + // TODO(leo): is this more or less stable than using both TCP and QUIC transports? + // https://github.com/libp2p/go-libp2p/issues/688 + fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", *p2pPort), + fmt.Sprintf("/ip6/::/udp/%d/quic", *p2pPort), + ), - // Enable TLS security as the only security protocol. - libp2p.Security(libp2ptls.ID, libp2ptls.New), + // Enable TLS security as the only security protocol. + libp2p.Security(libp2ptls.ID, libp2ptls.New), - // Enable QUIC transport as the only transport. - libp2p.Transport(libp2pquic.NewTransport), + // Enable QUIC transport as the only transport. + libp2p.Transport(libp2pquic.NewTransport), - // Let's prevent our peer from having too many - // connections by attaching a connection manager. - libp2p.ConnectionManager(connmgr.NewConnManager( - 100, // Lowwater - 400, // HighWater, - time.Minute, // GracePeriod - )), + // Let's prevent our peer from having too many + // connections by attaching a connection manager. + libp2p.ConnectionManager(connmgr.NewConnManager( + 100, // Lowwater + 400, // HighWater, + time.Minute, // GracePeriod + )), - // Let this host use the DHT to find other hosts - libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { - // TODO(leo): Persistent data store (i.e. address book) - idht, err = dht.New(ctx, h, dht.Mode(dht.ModeServer), - // TODO(leo): This intentionally makes us incompatible with the global IPFS DHT - dht.ProtocolPrefix(protocol.ID("/"+*p2pNetworkID)), + // Let this host use the DHT to find other hosts + libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { + // TODO(leo): Persistent data store (i.e. address book) + idht, err = dht.New(ctx, h, dht.Mode(dht.ModeServer), + // TODO(leo): This intentionally makes us incompatible with the global IPFS DHT + dht.ProtocolPrefix(protocol.ID("/"+*p2pNetworkID)), + ) + return idht, err + }), ) - return idht, err - }), -) -if err != nil { - panic(err) -} + if err != nil { + panic(err) + } -defer func() { - // TODO: libp2p cannot be cleanly restarted (https://github.com/libp2p/go-libp2p/issues/992) - logger.Error("p2p routine has exited, cancelling root context...", zap.Error(re)) - rootCtxCancel() -}() + defer func() { + // TODO: libp2p cannot be cleanly restarted (https://github.com/libp2p/go-libp2p/issues/992) + logger.Error("p2p routine has exited, cancelling root context...", zap.Error(re)) + rootCtxCancel() + }() logger.Info("Connecting to bootstrap peers", zap.String("bootstrap_peers", *p2pBootstrap)) diff --git a/bridge/cmd/guardiand/processor.go b/bridge/cmd/guardiand/processor.go index 5c3fcfff..b50dabd0 100644 --- a/bridge/cmd/guardiand/processor.go +++ b/bridge/cmd/guardiand/processor.go @@ -130,8 +130,9 @@ func vaaConsensusProcessor(lockC chan *common.ChainLock, setC chan *common.Guard SourceAddress: k.SourceAddress, TargetAddress: k.TargetAddress, Asset: &vaa.AssetMeta{ - Chain: k.TokenChain, - Address: k.TokenAddress, + Chain: k.TokenChain, + Address: k.TokenAddress, + Decimals: k.TokenDecimals, }, Amount: k.Amount, }, @@ -281,10 +282,15 @@ func vaaConsensusProcessor(lockC chan *common.ChainLock, setC chan *common.Guard zap.Any("vaa", signed), zap.String("bytes", hex.EncodeToString(vaaBytes))) - if idx == 0 { + if idx == 1 { vaaC <- signed } case t.TargetChain == vaa.ChainIDEthereum: + // cross-submit to Solana for data availability + if idx == 1 { + vaaC <- signed + } + timeout, cancel := context.WithTimeout(ctx, 15*time.Second) tx, err := devnet.SubmitVAA(timeout, *ethRPC, signed) cancel() @@ -294,10 +300,6 @@ func vaaConsensusProcessor(lockC chan *common.ChainLock, setC chan *common.Guard } logger.Info("lockup submitted to Ethereum", zap.Any("tx", tx)) - // cross-submit to Solana for data availability - if idx == 0 { - vaaC <- signed - } default: logger.Error("we don't know how to submit this VAA", zap.String("digest", hash), diff --git a/bridge/cmd/vaa-test/main.go b/bridge/cmd/vaa-test/main.go index f33dc5c8..b37e1d1a 100644 --- a/bridge/cmd/vaa-test/main.go +++ b/bridge/cmd/vaa-test/main.go @@ -20,6 +20,8 @@ type signerInfo struct { index int } +var i = 0 + func main() { keys := generateKeys(6) @@ -38,8 +40,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 4}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -56,8 +59,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 4}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDEthereum, - Address: hexToAddress("0xd833215cbcc3f914bd1c9ece3ee7bf8b14f841bb"), + Chain: vaa.ChainIDEthereum, + Address: hexToAddress("0xd833215cbcc3f914bd1c9ece3ee7bf8b14f841bb"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -98,8 +102,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 4}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -116,8 +121,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 5}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -134,13 +140,33 @@ func main() { SourceAddress: vaa.Address{2, 1, 5}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, }, []*signerInfo{{keys[1], 0}}) + signAndPrintVAA(&vaa.VAA{ + Version: 1, + GuardianSetIndex: 1, + Timestamp: time.Unix(2000, 0), + Payload: &vaa.BodyTransfer{ + Nonce: 57, + SourceChain: 1, + TargetChain: 2, + SourceAddress: vaa.Address{2, 1, 5}, + TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), + Asset: &vaa.AssetMeta{ + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, + }, + Amount: big.NewInt(1000000000000000000), + }, + }, []*signerInfo{{keys[0], 0}}) + signAndPrintVAA(&vaa.VAA{ Version: 1, GuardianSetIndex: 1, @@ -169,8 +195,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 5}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -187,8 +214,9 @@ func main() { SourceAddress: vaa.Address{2, 1, 5}, TargetAddress: padAddress(devnet.GanacheClientDefaultAccountAddress), Asset: &vaa.AssetMeta{ - Chain: vaa.ChainIDSolana, - Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Chain: vaa.ChainIDSolana, + Address: hexToAddress("0x347ef34687bdc9f189e87a9200658d9c40e9988"), + Decimals: 8, }, Amount: big.NewInt(1000000000000000000), }, @@ -203,7 +231,8 @@ func signAndPrintVAA(vaa *vaa.VAA, signers []*signerInfo) { if err != nil { panic(err) } - println(hex.EncodeToString(vData)) + println(i, hex.EncodeToString(vData)) + i++ } func generateKeys(n int) (keys []*ecdsa.PrivateKey) { diff --git a/bridge/pkg/common/chainlock.go b/bridge/pkg/common/chainlock.go index 0f7681c6..4d47c819 100644 --- a/bridge/pkg/common/chainlock.go +++ b/bridge/pkg/common/chainlock.go @@ -21,8 +21,9 @@ type ChainLock struct { SourceChain vaa.ChainID TargetChain vaa.ChainID - TokenChain vaa.ChainID - TokenAddress vaa.Address + TokenChain vaa.ChainID + TokenAddress vaa.Address + TokenDecimals uint8 Amount *big.Int } diff --git a/bridge/pkg/ethereum/abi/abi.go b/bridge/pkg/ethereum/abi/abi.go index 3beb8f16..fdf67df3 100644 --- a/bridge/pkg/ethereum/abi/abi.go +++ b/bridge/pkg/ethereum/abi/abi.go @@ -20,7 +20,6 @@ var ( _ = big.NewInt _ = strings.NewReader _ = ethereum.NotFound - _ = abi.U256 _ = bind.Bind _ = common.Big1 _ = types.BloomLookup @@ -34,7 +33,7 @@ type WormholeGuardianSet struct { } // AbiABI is the input ABI used to generate the binding from. -const AbiABI = "[{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"structWormhole.GuardianSet\",\"name\":\"initial_guardian_set\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wrapped_asset_master\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_guardian_set_expirity\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"oldGuardianIndex\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newGuardianIndex\",\"type\":\"uint32\"}],\"name\":\"LogGuardianSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_chain\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"token\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"LogTokensLocked\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"guardian_set_expirity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_index\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"guardian_sets\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWrappedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedAssetMaster\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"wrappedAssets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"idx\",\"type\":\"uint32\"}],\"name\":\"getGuardianSet\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"structWormhole.GuardianSet\",\"name\":\"gs\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"vaa\",\"type\":\"bytes\"}],\"name\":\"submitVAA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]" +const AbiABI = "[{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"structWormhole.GuardianSet\",\"name\":\"initial_guardian_set\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wrapped_asset_master\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_guardian_set_expirity\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"oldGuardianIndex\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newGuardianIndex\",\"type\":\"uint32\"}],\"name\":\"LogGuardianSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_decimals\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"token\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"LogTokensLocked\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"consumedVAAs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_expirity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_index\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"guardian_sets\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWrappedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedAssetMaster\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"wrappedAssets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"idx\",\"type\":\"uint32\"}],\"name\":\"getGuardianSet\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"structWormhole.GuardianSet\",\"name\":\"gs\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"vaa\",\"type\":\"bytes\"}],\"name\":\"submitVAA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]" // Abi is an auto generated Go binding around an Ethereum contract. type Abi struct { @@ -178,9 +177,35 @@ func (_Abi *AbiTransactorRaw) Transact(opts *bind.TransactOpts, method string, p return _Abi.Contract.contract.Transact(opts, method, params...) } +// ConsumedVAAs is a free data retrieval call binding the contract method 0xa31fe409. +// +// Solidity: function consumedVAAs(bytes32 ) view returns(bool) +func (_Abi *AbiCaller) ConsumedVAAs(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var ( + ret0 = new(bool) + ) + out := ret0 + err := _Abi.contract.Call(opts, out, "consumedVAAs", arg0) + return *ret0, err +} + +// ConsumedVAAs is a free data retrieval call binding the contract method 0xa31fe409. +// +// Solidity: function consumedVAAs(bytes32 ) view returns(bool) +func (_Abi *AbiSession) ConsumedVAAs(arg0 [32]byte) (bool, error) { + return _Abi.Contract.ConsumedVAAs(&_Abi.CallOpts, arg0) +} + +// ConsumedVAAs is a free data retrieval call binding the contract method 0xa31fe409. +// +// Solidity: function consumedVAAs(bytes32 ) view returns(bool) +func (_Abi *AbiCallerSession) ConsumedVAAs(arg0 [32]byte) (bool, error) { + return _Abi.Contract.ConsumedVAAs(&_Abi.CallOpts, arg0) +} + // GetGuardianSet is a free data retrieval call binding the contract method 0xf951975a. // -// Solidity: function getGuardianSet(uint32 idx) constant returns(WormholeGuardianSet gs) +// Solidity: function getGuardianSet(uint32 idx) view returns((address[],uint32) gs) func (_Abi *AbiCaller) GetGuardianSet(opts *bind.CallOpts, idx uint32) (WormholeGuardianSet, error) { var ( ret0 = new(WormholeGuardianSet) @@ -192,21 +217,21 @@ func (_Abi *AbiCaller) GetGuardianSet(opts *bind.CallOpts, idx uint32) (Wormhole // GetGuardianSet is a free data retrieval call binding the contract method 0xf951975a. // -// Solidity: function getGuardianSet(uint32 idx) constant returns(WormholeGuardianSet gs) +// Solidity: function getGuardianSet(uint32 idx) view returns((address[],uint32) gs) func (_Abi *AbiSession) GetGuardianSet(idx uint32) (WormholeGuardianSet, error) { return _Abi.Contract.GetGuardianSet(&_Abi.CallOpts, idx) } // GetGuardianSet is a free data retrieval call binding the contract method 0xf951975a. // -// Solidity: function getGuardianSet(uint32 idx) constant returns(WormholeGuardianSet gs) +// Solidity: function getGuardianSet(uint32 idx) view returns((address[],uint32) gs) func (_Abi *AbiCallerSession) GetGuardianSet(idx uint32) (WormholeGuardianSet, error) { return _Abi.Contract.GetGuardianSet(&_Abi.CallOpts, idx) } // GuardianSetExpirity is a free data retrieval call binding the contract method 0x4db47840. // -// Solidity: function guardian_set_expirity() constant returns(uint32) +// Solidity: function guardian_set_expirity() view returns(uint32) func (_Abi *AbiCaller) GuardianSetExpirity(opts *bind.CallOpts) (uint32, error) { var ( ret0 = new(uint32) @@ -218,21 +243,21 @@ func (_Abi *AbiCaller) GuardianSetExpirity(opts *bind.CallOpts) (uint32, error) // GuardianSetExpirity is a free data retrieval call binding the contract method 0x4db47840. // -// Solidity: function guardian_set_expirity() constant returns(uint32) +// Solidity: function guardian_set_expirity() view returns(uint32) func (_Abi *AbiSession) GuardianSetExpirity() (uint32, error) { return _Abi.Contract.GuardianSetExpirity(&_Abi.CallOpts) } // GuardianSetExpirity is a free data retrieval call binding the contract method 0x4db47840. // -// Solidity: function guardian_set_expirity() constant returns(uint32) +// Solidity: function guardian_set_expirity() view returns(uint32) func (_Abi *AbiCallerSession) GuardianSetExpirity() (uint32, error) { return _Abi.Contract.GuardianSetExpirity(&_Abi.CallOpts) } // GuardianSetIndex is a free data retrieval call binding the contract method 0x822d82b3. // -// Solidity: function guardian_set_index() constant returns(uint32) +// Solidity: function guardian_set_index() view returns(uint32) func (_Abi *AbiCaller) GuardianSetIndex(opts *bind.CallOpts) (uint32, error) { var ( ret0 = new(uint32) @@ -244,21 +269,21 @@ func (_Abi *AbiCaller) GuardianSetIndex(opts *bind.CallOpts) (uint32, error) { // GuardianSetIndex is a free data retrieval call binding the contract method 0x822d82b3. // -// Solidity: function guardian_set_index() constant returns(uint32) +// Solidity: function guardian_set_index() view returns(uint32) func (_Abi *AbiSession) GuardianSetIndex() (uint32, error) { return _Abi.Contract.GuardianSetIndex(&_Abi.CallOpts) } // GuardianSetIndex is a free data retrieval call binding the contract method 0x822d82b3. // -// Solidity: function guardian_set_index() constant returns(uint32) +// Solidity: function guardian_set_index() view returns(uint32) func (_Abi *AbiCallerSession) GuardianSetIndex() (uint32, error) { return _Abi.Contract.GuardianSetIndex(&_Abi.CallOpts) } // GuardianSets is a free data retrieval call binding the contract method 0x42b0aefa. // -// Solidity: function guardian_sets(uint32 ) constant returns(uint32 expiration_time) +// Solidity: function guardian_sets(uint32 ) view returns(uint32 expiration_time) func (_Abi *AbiCaller) GuardianSets(opts *bind.CallOpts, arg0 uint32) (uint32, error) { var ( ret0 = new(uint32) @@ -270,21 +295,21 @@ func (_Abi *AbiCaller) GuardianSets(opts *bind.CallOpts, arg0 uint32) (uint32, e // GuardianSets is a free data retrieval call binding the contract method 0x42b0aefa. // -// Solidity: function guardian_sets(uint32 ) constant returns(uint32 expiration_time) +// Solidity: function guardian_sets(uint32 ) view returns(uint32 expiration_time) func (_Abi *AbiSession) GuardianSets(arg0 uint32) (uint32, error) { return _Abi.Contract.GuardianSets(&_Abi.CallOpts, arg0) } // GuardianSets is a free data retrieval call binding the contract method 0x42b0aefa. // -// Solidity: function guardian_sets(uint32 ) constant returns(uint32 expiration_time) +// Solidity: function guardian_sets(uint32 ) view returns(uint32 expiration_time) func (_Abi *AbiCallerSession) GuardianSets(arg0 uint32) (uint32, error) { return _Abi.Contract.GuardianSets(&_Abi.CallOpts, arg0) } // IsWrappedAsset is a free data retrieval call binding the contract method 0x1a2be4da. // -// Solidity: function isWrappedAsset(address ) constant returns(bool) +// Solidity: function isWrappedAsset(address ) view returns(bool) func (_Abi *AbiCaller) IsWrappedAsset(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var ( ret0 = new(bool) @@ -296,21 +321,21 @@ func (_Abi *AbiCaller) IsWrappedAsset(opts *bind.CallOpts, arg0 common.Address) // IsWrappedAsset is a free data retrieval call binding the contract method 0x1a2be4da. // -// Solidity: function isWrappedAsset(address ) constant returns(bool) +// Solidity: function isWrappedAsset(address ) view returns(bool) func (_Abi *AbiSession) IsWrappedAsset(arg0 common.Address) (bool, error) { return _Abi.Contract.IsWrappedAsset(&_Abi.CallOpts, arg0) } // IsWrappedAsset is a free data retrieval call binding the contract method 0x1a2be4da. // -// Solidity: function isWrappedAsset(address ) constant returns(bool) +// Solidity: function isWrappedAsset(address ) view returns(bool) func (_Abi *AbiCallerSession) IsWrappedAsset(arg0 common.Address) (bool, error) { return _Abi.Contract.IsWrappedAsset(&_Abi.CallOpts, arg0) } // WrappedAssetMaster is a free data retrieval call binding the contract method 0x99da1d3c. // -// Solidity: function wrappedAssetMaster() constant returns(address) +// Solidity: function wrappedAssetMaster() view returns(address) func (_Abi *AbiCaller) WrappedAssetMaster(opts *bind.CallOpts) (common.Address, error) { var ( ret0 = new(common.Address) @@ -322,21 +347,21 @@ func (_Abi *AbiCaller) WrappedAssetMaster(opts *bind.CallOpts) (common.Address, // WrappedAssetMaster is a free data retrieval call binding the contract method 0x99da1d3c. // -// Solidity: function wrappedAssetMaster() constant returns(address) +// Solidity: function wrappedAssetMaster() view returns(address) func (_Abi *AbiSession) WrappedAssetMaster() (common.Address, error) { return _Abi.Contract.WrappedAssetMaster(&_Abi.CallOpts) } // WrappedAssetMaster is a free data retrieval call binding the contract method 0x99da1d3c. // -// Solidity: function wrappedAssetMaster() constant returns(address) +// Solidity: function wrappedAssetMaster() view returns(address) func (_Abi *AbiCallerSession) WrappedAssetMaster() (common.Address, error) { return _Abi.Contract.WrappedAssetMaster(&_Abi.CallOpts) } // WrappedAssets is a free data retrieval call binding the contract method 0xb6694c2a. // -// Solidity: function wrappedAssets(bytes32 ) constant returns(address) +// Solidity: function wrappedAssets(bytes32 ) view returns(address) func (_Abi *AbiCaller) WrappedAssets(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { var ( ret0 = new(common.Address) @@ -348,14 +373,14 @@ func (_Abi *AbiCaller) WrappedAssets(opts *bind.CallOpts, arg0 [32]byte) (common // WrappedAssets is a free data retrieval call binding the contract method 0xb6694c2a. // -// Solidity: function wrappedAssets(bytes32 ) constant returns(address) +// Solidity: function wrappedAssets(bytes32 ) view returns(address) func (_Abi *AbiSession) WrappedAssets(arg0 [32]byte) (common.Address, error) { return _Abi.Contract.WrappedAssets(&_Abi.CallOpts, arg0) } // WrappedAssets is a free data retrieval call binding the contract method 0xb6694c2a. // -// Solidity: function wrappedAssets(bytes32 ) constant returns(address) +// Solidity: function wrappedAssets(bytes32 ) view returns(address) func (_Abi *AbiCallerSession) WrappedAssets(arg0 [32]byte) (common.Address, error) { return _Abi.Contract.WrappedAssets(&_Abi.CallOpts, arg0) } @@ -383,21 +408,21 @@ func (_Abi *AbiTransactorSession) LockAssets(asset common.Address, amount *big.I // LockETH is a paid mutator transaction binding the contract method 0x58d62e46. // -// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) returns() +// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) payable returns() func (_Abi *AbiTransactor) LockETH(opts *bind.TransactOpts, recipient [32]byte, target_chain uint8, nonce uint32) (*types.Transaction, error) { return _Abi.contract.Transact(opts, "lockETH", recipient, target_chain, nonce) } // LockETH is a paid mutator transaction binding the contract method 0x58d62e46. // -// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) returns() +// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) payable returns() func (_Abi *AbiSession) LockETH(recipient [32]byte, target_chain uint8, nonce uint32) (*types.Transaction, error) { return _Abi.Contract.LockETH(&_Abi.TransactOpts, recipient, target_chain, nonce) } // LockETH is a paid mutator transaction binding the contract method 0x58d62e46. // -// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) returns() +// Solidity: function lockETH(bytes32 recipient, uint8 target_chain, uint32 nonce) payable returns() func (_Abi *AbiTransactorSession) LockETH(recipient [32]byte, target_chain uint8, nonce uint32) (*types.Transaction, error) { return _Abi.Contract.LockETH(&_Abi.TransactOpts, recipient, target_chain, nonce) } @@ -423,6 +448,48 @@ func (_Abi *AbiTransactorSession) SubmitVAA(vaa []byte) (*types.Transaction, err return _Abi.Contract.SubmitVAA(&_Abi.TransactOpts, vaa) } +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Abi *AbiTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _Abi.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Abi *AbiSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Abi.Contract.Fallback(&_Abi.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Abi *AbiTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Abi.Contract.Fallback(&_Abi.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Abi *AbiTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Abi.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Abi *AbiSession) Receive() (*types.Transaction, error) { + return _Abi.Contract.Receive(&_Abi.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Abi *AbiTransactorSession) Receive() (*types.Transaction, error) { + return _Abi.Contract.Receive(&_Abi.TransactOpts) +} + // AbiLogGuardianSetChangedIterator is returned from FilterLogGuardianSetChanged and is used to iterate over the raw logs and unpacked data for LogGuardianSetChanged events raised by the Abi contract. type AbiLogGuardianSetChangedIterator struct { Event *AbiLogGuardianSetChanged // Event containing the contract specifics and raw log @@ -626,19 +693,20 @@ func (it *AbiLogTokensLockedIterator) Close() error { // AbiLogTokensLocked represents a LogTokensLocked event raised by the Abi contract. type AbiLogTokensLocked struct { - TargetChain uint8 - TokenChain uint8 - Token [32]byte - Sender [32]byte - Recipient [32]byte - Amount *big.Int - Nonce uint32 - Raw types.Log // Blockchain specific contextual infos + TargetChain uint8 + TokenChain uint8 + TokenDecimals uint8 + Token [32]byte + Sender [32]byte + Recipient [32]byte + Amount *big.Int + Nonce uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterLogTokensLocked is a free log retrieval operation binding the contract event 0x5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e2420. +// FilterLogTokensLocked is a free log retrieval operation binding the contract event 0x6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab8. // -// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) +// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, uint8 token_decimals, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) func (_Abi *AbiFilterer) FilterLogTokensLocked(opts *bind.FilterOpts, token [][32]byte, sender [][32]byte) (*AbiLogTokensLockedIterator, error) { var tokenRule []interface{} @@ -657,9 +725,9 @@ func (_Abi *AbiFilterer) FilterLogTokensLocked(opts *bind.FilterOpts, token [][3 return &AbiLogTokensLockedIterator{contract: _Abi.contract, event: "LogTokensLocked", logs: logs, sub: sub}, nil } -// WatchLogTokensLocked is a free log subscription operation binding the contract event 0x5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e2420. +// WatchLogTokensLocked is a free log subscription operation binding the contract event 0x6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab8. // -// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) +// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, uint8 token_decimals, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) func (_Abi *AbiFilterer) WatchLogTokensLocked(opts *bind.WatchOpts, sink chan<- *AbiLogTokensLocked, token [][32]byte, sender [][32]byte) (event.Subscription, error) { var tokenRule []interface{} @@ -703,9 +771,9 @@ func (_Abi *AbiFilterer) WatchLogTokensLocked(opts *bind.WatchOpts, sink chan<- }), nil } -// ParseLogTokensLocked is a log parse operation binding the contract event 0x5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e2420. +// ParseLogTokensLocked is a log parse operation binding the contract event 0x6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab8. // -// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) +// Solidity: event LogTokensLocked(uint8 target_chain, uint8 token_chain, uint8 token_decimals, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, uint256 amount, uint32 nonce) func (_Abi *AbiFilterer) ParseLogTokensLocked(log types.Log) (*AbiLogTokensLocked, error) { event := new(AbiLogTokensLocked) if err := _Abi.contract.UnpackLog(event, "LogTokensLocked", log); err != nil { diff --git a/bridge/pkg/ethereum/watcher.go b/bridge/pkg/ethereum/watcher.go index 1f68608f..6bfb1656 100644 --- a/bridge/pkg/ethereum/watcher.go +++ b/bridge/pkg/ethereum/watcher.go @@ -114,6 +114,7 @@ func (e *EthBridgeWatcher) Run(ctx context.Context) error { TargetChain: vaa.ChainID(ev.TargetChain), TokenChain: vaa.ChainID(ev.TokenChain), TokenAddress: ev.Token, + TokenDecimals: ev.TokenDecimals, Amount: ev.Amount, } diff --git a/bridge/pkg/solana/watcher.go b/bridge/pkg/solana/watcher.go index 196bb02e..6d4e1267 100644 --- a/bridge/pkg/solana/watcher.go +++ b/bridge/pkg/solana/watcher.go @@ -32,16 +32,6 @@ func NewSolanaBridgeWatcher(url string, lockEvents chan *common.ChainLock, vaaQu return &SolanaBridgeWatcher{url: url, lockChan: lockEvents, vaaChan: vaaQueue} } -// TODO: document/deduplicate -func padAddress(address eth_common.Address) vaa.Address { - paddedAddress := eth_common.LeftPadBytes(address[:], 32) - - addr := vaa.Address{} - copy(addr[:], paddedAddress) - - return addr -} - func (e *SolanaBridgeWatcher) Run(ctx context.Context) error { timeout, cancel := context.WithTimeout(ctx, 15*time.Second) defer cancel() @@ -75,20 +65,21 @@ func (e *SolanaBridgeWatcher) Run(ctx context.Context) error { switch event := ev.Event.(type) { case *agentv1.LockupEvent_New: logger.Debug("received lockup event", - zap.Any("event", ev)) // TODO: debug level + zap.Any("event", ev)) lock := &common.ChainLock{ TxHash: eth_common.HexToHash(ev.LockupAddress), - Timestamp: time.Time{}, // FIXME + Timestamp: time.Unix(int64(ev.Time), 0), Nonce: event.New.Nonce, - SourceAddress: padAddress(eth_common.BytesToAddress(event.New.SourceAddress)), - TargetAddress: padAddress(eth_common.BytesToAddress(event.New.TargetAddress)), SourceChain: vaa.ChainIDSolana, TargetChain: vaa.ChainID(event.New.TargetChain), TokenChain: vaa.ChainID(event.New.TokenChain), + TokenDecimals: uint8(event.New.TokenDecimals), Amount: new(big.Int).SetBytes(event.New.Amount), } copy(lock.TokenAddress[:], event.New.TokenAddress) + copy(lock.SourceAddress[:], event.New.SourceAddress) + copy(lock.TargetAddress[:], event.New.TargetAddress) e.lockChan <- lock logger.Info("found new lockup transaction", zap.String("lockup_address", ev.LockupAddress)) diff --git a/bridge/pkg/vaa/structs.go b/bridge/pkg/vaa/structs.go index 097b2248..f94d37d3 100644 --- a/bridge/pkg/vaa/structs.go +++ b/bridge/pkg/vaa/structs.go @@ -44,7 +44,7 @@ type ( // Index of the validator Index uint8 // Signature data - Signature [65]byte // TODO: hex marshaller + Signature [65]byte // TODO: hex marshaller } // AssetMeta describes an asset within the Wormhole protocol @@ -53,6 +53,8 @@ type ( Chain ChainID // Address is the address of the token contract/mint/equivalent. Address Address + // Decimals is the number of decimals the token has + Decimals uint8 } vaaBody interface { @@ -113,8 +115,6 @@ const ( SupportedVAAVersion = 0x01 ) - - // Unmarshal deserializes the binary representation of a VAA func Unmarshal(data []byte) (*VAA, error) { if len(data) < minVAALength { @@ -321,6 +321,9 @@ func parseBodyTransfer(r io.Reader) (*BodyTransfer, error) { if n, err := r.Read(b.Asset.Address[:]); err != nil || n != 32 { return nil, fmt.Errorf("failed to read asset address: %w", err) } + if err := binary.Read(r, binary.BigEndian, &b.Asset.Decimals); err != nil { + return nil, fmt.Errorf("failed to read asset decimals: %w", err) + } var amountBytes [32]byte if n, err := r.Read(amountBytes[:]); err != nil || n != 32 { @@ -348,6 +351,7 @@ func (v *BodyTransfer) serialize() ([]byte, error) { } MustWrite(buf, binary.BigEndian, v.Asset.Chain) buf.Write(v.Asset.Address[:]) + MustWrite(buf, binary.BigEndian, v.Asset.Decimals) if v.Amount == nil { return nil, fmt.Errorf("amount is empty") diff --git a/docs/solana_program.md b/docs/solana_program.md index 4fd33fc3..3cc866bc 100644 --- a/docs/solana_program.md +++ b/docs/solana_program.md @@ -125,6 +125,7 @@ followed by: | 7 | token_program | SplToken | | | ️ | | | 8 | token | WrappedAsset | | | | ✅ | | 9 | destination | TokenAccount | | ✅ | | | +| 10 | wrapped_meta | WrappedMeta | | ✅ | opt | ✅ | ##### Transfer: Ethereum (wrapped) -> Solana (native) diff --git a/ethereum/contracts/Wormhole.sol b/ethereum/contracts/Wormhole.sol index fb78cf86..45ef7202 100644 --- a/ethereum/contracts/Wormhole.sol +++ b/ethereum/contracts/Wormhole.sol @@ -6,6 +6,7 @@ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; @@ -40,6 +41,7 @@ contract Wormhole is ReentrancyGuard { event LogTokensLocked( uint8 target_chain, uint8 token_chain, + uint8 token_decimals, bytes32 indexed token, bytes32 indexed sender, bytes32 recipient, @@ -56,7 +58,7 @@ contract Wormhole is ReentrancyGuard { uint32 public guardian_set_expirity; // Mapping of already consumedVAAs - mapping(bytes32 => bool) consumedVAAs; + mapping(bytes32 => bool) public consumedVAAs; // Mapping of wrapped asset ERC20 contracts mapping(bytes32 => address) public wrappedAssets; @@ -88,7 +90,7 @@ contract Wormhole is ReentrancyGuard { uint offset = 6 + 66 * len_signers; // Load 4 bytes timestamp - uint32 timestamp = vaa.toUint32(offset); + //uint32 timestamp = vaa.toUint32(offset); // Hash the body bytes32 hash = keccak256(vaa.slice(offset, vaa.length - offset)); @@ -155,7 +157,7 @@ contract Wormhole is ReentrancyGuard { uint8 token_chain = data.toUint8(70); //bytes32 token_address = data.toBytes32(71); - uint256 amount = data.toUint256(103); + uint256 amount = data.toUint256(104); require(source_chain != target_chain, "same chain transfers are not supported"); require(target_chain == CHAIN_ID, "transfer must be incoming"); @@ -168,7 +170,8 @@ contract Wormhole is ReentrancyGuard { // if no: create and mint address wrapped_asset = wrappedAssets[asset_id]; if (wrapped_asset == address(0)) { - wrapped_asset = deployWrappedAsset(asset_id, token_chain, token_address); + uint8 asset_decimals = data.toUint8(103); + wrapped_asset = deployWrappedAsset(asset_id, token_chain, token_address, asset_decimals); } WrappedAsset(wrapped_asset).mint(target_address, amount); @@ -179,7 +182,7 @@ contract Wormhole is ReentrancyGuard { } } - function deployWrappedAsset(bytes32 seed, uint8 token_chain, bytes32 token_address) private returns (address asset){ + function deployWrappedAsset(bytes32 seed, uint8 token_chain, bytes32 token_address, uint8 decimals) private returns (address asset){ // Taken from https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/ProxyFactory.sol // Licensed under MIT bytes20 targetBytes = bytes20(wrappedAssetMaster); @@ -192,7 +195,7 @@ contract Wormhole is ReentrancyGuard { } // Call initializer - WrappedAsset(asset).initialize(token_chain, token_address); + WrappedAsset(asset).initialize(token_chain, token_address, decimals); // Store address wrappedAssets[seed] = asset; @@ -225,7 +228,7 @@ contract Wormhole is ReentrancyGuard { asset_address = bytes32(uint256(asset)); } - emit LogTokensLocked(target_chain, asset_chain, asset_address, bytes32(uint256(msg.sender)), recipient, amount, nonce); + emit LogTokensLocked(target_chain, asset_chain, ERC20(asset).decimals(), asset_address, bytes32(uint256(msg.sender)), recipient, amount, nonce); } function lockETH( @@ -239,7 +242,7 @@ contract Wormhole is ReentrancyGuard { WETH(WETHAddress).deposit{value : msg.value}(); // Log deposit of WETH - emit LogTokensLocked(target_chain, CHAIN_ID, bytes32(uint256(WETHAddress)), bytes32(uint256(msg.sender)), recipient, msg.value, nonce); + emit LogTokensLocked(target_chain, CHAIN_ID, 18, bytes32(uint256(WETHAddress)), bytes32(uint256(msg.sender)), recipient, msg.value, nonce); } diff --git a/ethereum/contracts/WrappedAsset.sol b/ethereum/contracts/WrappedAsset.sol index db051b49..a34348ee 100644 --- a/ethereum/contracts/WrappedAsset.sol +++ b/ethereum/contracts/WrappedAsset.sol @@ -13,7 +13,7 @@ contract WrappedAsset is IERC20, Context { bool public initialized; address public bridge; - function initialize(uint8 _assetChain, bytes32 _assetAddress) public { + function initialize(uint8 _assetChain, bytes32 _assetAddress, uint8 decimals) public { require(!initialized, "already initialized"); // Set local fields assetChain = _assetChain; @@ -23,7 +23,7 @@ contract WrappedAsset is IERC20, Context { _name = "Wormhole Wrapped"; _symbol = "WWT"; - _decimals = 18; + _decimals = decimals; } function mint(address account, uint256 amount) external { diff --git a/ethereum/test/wormhole.js b/ethereum/test/wormhole.js index 8e2133e2..9da941af 100644 --- a/ethereum/test/wormhole.js +++ b/ethereum/test/wormhole.js @@ -58,12 +58,11 @@ contract("Wormhole", function () { let bridge = await Wormhole.deployed(); // User locked an asset on the foreign chain and the VAA proving this is transferred in. - await bridge.submitVAA("0x01000000000100eecb367540286d326e333ea06542b82d3feaeb0dc33b1b14bda8cdf8287da2a630a9a6692112bcedee501c0947c607081d51426fa1982ef342c07f4502b584c801000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x01000000000100454e7de661cd4386b1ce598a505825f8ed66fbc6a608393bae6257fef7370da27a2068240a902470bed6c0b1fa23d38e5d5958e2a422d59a0217fbe155638ed600000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") // Expect user to have a balance of a new wrapped asset - // submitVAA has automatically created a new WrappedAsset for the foreign asset that has been transferred in. // We know the address because deterministic network. A user would see the address in the submitVAA tx log. - let wa = new WrappedAsset("0x3c63250aFA2470359482d98749f2d60D2971c818"); + let wa = new WrappedAsset("0xC3697aaf5B3D354214548248710414812099bc93"); assert.equal(await wa.assetChain(), 1) // Remote asset's contract address. assert.equal(await wa.assetAddress(), "0x0000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988") @@ -75,7 +74,7 @@ contract("Wormhole", function () { it("should not accept the same VAA twice", async function () { let bridge = await Wormhole.deployed(); try { - await bridge.submitVAA("0x01000000000100eecb367540286d326e333ea06542b82d3feaeb0dc33b1b14bda8cdf8287da2a630a9a6692112bcedee501c0947c607081d51426fa1982ef342c07f4502b584c801000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000"); + await bridge.submitVAA("0x01000000000100454e7de661cd4386b1ce598a505825f8ed66fbc6a608393bae6257fef7370da27a2068240a902470bed6c0b1fa23d38e5d5958e2a422d59a0217fbe155638ed600000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000"); } catch (e) { assert.equal(e.reason, "VAA was already executed") return @@ -86,7 +85,7 @@ contract("Wormhole", function () { it("should burn tokens on lock", async function () { let bridge = await Wormhole.deployed(); // Expect user to have a balance - let wa = new WrappedAsset("0x3c63250aFA2470359482d98749f2d60D2971c818") + let wa = new WrappedAsset("0xC3697aaf5B3D354214548248710414812099bc93") await bridge.lockAssets(wa.address, "500000000000000000", "0x0", 2, 2); let balance = await wa.balanceOf("0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1"); @@ -113,7 +112,7 @@ contract("Wormhole", function () { // Transfer of that token out of the contract should not work let threw = false; try { - await bridge.submitVAA("0x01000000000100e2d8610a6cf10587ba2e4f43dc639eeacd3fb4297338955b00b7653094278082505de82418b9e0925d9dd889d0850252aa7c613e63c8b2c27ff22c0001c6336600000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c102000000000000000000000000d833215cbcc3f914bd1c9ece3ee7bf8b14f841bb0000000000000000000000000000000000000000000000000de0b6b3a7640000"); + await bridge.submitVAA("0x01000000000100078f0fe9406808b1e5003867ab74aa2085153b7735b329640d275ea943dd115d00e356c6d343142d9190872c11d2de898d075cea7f4e85ff2188af299e26a14200000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c102000000000000000000000000d833215cbcc3f914bd1c9ece3ee7bf8b14f841bb080000000000000000000000000000000000000000000000000de0b6b3a7640000"); } catch (e) { threw = true; } @@ -137,7 +136,7 @@ contract("Wormhole", function () { assert.equal(await token.balanceOf(bridge.address), "1000000000000000000"); // Transfer this token back - await bridge.submitVAA("0x01000000000100e2d8610a6cf10587ba2e4f43dc639eeacd3fb4297338955b00b7653094278082505de82418b9e0925d9dd889d0850252aa7c613e63c8b2c27ff22c0001c6336600000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c102000000000000000000000000d833215cbcc3f914bd1c9ece3ee7bf8b14f841bb0000000000000000000000000000000000000000000000000de0b6b3a7640000"); + await bridge.submitVAA("0x01000000000100078f0fe9406808b1e5003867ab74aa2085153b7735b329640d275ea943dd115d00e356c6d343142d9190872c11d2de898d075cea7f4e85ff2188af299e26a14200000007d010000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c102000000000000000000000000d833215cbcc3f914bd1c9ece3ee7bf8b14f841bb080000000000000000000000000000000000000000000000000de0b6b3a7640000"); assert.equal(await token.balanceOf("0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1"), "1000000000000000000"); assert.equal(await token.balanceOf(bridge.address), "0"); }); @@ -173,14 +172,14 @@ contract("Wormhole", function () { let bridge = await Wormhole.deployed(); // Test VAA from guardian set 0; timestamp 1000 - await bridge.submitVAA("0x0100000000010000b61ecc7b9de12de6fc7f01d8a89f8c2911329e44198d0a47768344c69eadd510fd5ab6474a24aa11a6751465fb4e2f8c81a4dbc2fc2427b4c5a981e8e63ed900000003e810000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x0100000000010034890d1c1aa2455d083602996d924ca9ba2fd9641dcdaa3b0811c9ed37e831a8433b40b0f0779fa16be2daaf53ede378530a135b68ac95814c9d25023a29580e01000003e810000000380102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") await advanceTimeAndBlock(1000); // Test VAA from guardian set 0; timestamp 2000 - should not work anymore let threw = false; try { - await bridge.submitVAA("0x01000000000100b7e82826980fb9f2389a6e22f7db12d5872e7900775c2c5d6ad1c3558ee7a1314f0f7f171cad73caaac0599c8914009ea9d0ef0e416404b141f844b85a5d254701000007d010000000380102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x010000000001005a55b73ff79bc3cc39bec075ae28ae8351eee1428a7701f0d47fec5736bcfd9e158b49e6282678c425aed8185233ea4ef033af33bd450a77a46ddbadf3ea09ba00000007d010000000380102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") } catch (e) { threw = true; assert.equal(e.reason, "guardian set has expired") @@ -188,7 +187,7 @@ contract("Wormhole", function () { assert.isTrue(threw, "guardian set did not expire") // Test same transaction with guardian set 1; timestamp 2000 - await bridge.submitVAA("0x01000000010100a3f58fb72b3c7e242d6934718eafb3076cb0764e65d8df3e0746b0c72cca791027ac649fa0095a1c3537611f4adc0dc90aaa01fce31fac722eae898cfb06e96d01000007d010000000380102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x01000000010100958a39752b14ab62a3dcdb37a8642c4ca1085c6ac77205a462ee5bb3650c92407675729615f69255fc150835621e96c917e68929efb975db9647636543c710f200000007d010000000380102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") }); it("mismatching guardian set and signature should not work", async function () { @@ -197,7 +196,7 @@ contract("Wormhole", function () { // Test VAA signed by guardian set 0 but set guardian set index to 1 let threw = false; try { - await bridge.submitVAA("0x010000000101006f84df72f3f935543e9bda60d92f77e2e2c073655311f3fc00518bbe7e054ff87e5e6e3c9df9e5bd756ee033253d4513ddebf03ff844fdc0f48f7dcc1b3fd6e10000000fa01087000000370102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000009561c133dd8580860b6b7e504bc5aa500f0f06a70000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x01000000010100724a1d2cda45da3cf38f9e0eaef01742210f4deabf9b9d4b20127f6a200a94805928e26ae5f5ab8c3e1cb6d5231d4c48aacae0841513fbd3d9d430be7145db8200000007d010000000390102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") } catch (e) { threw = true; assert.equal(e.reason, "VAA signature invalid") @@ -214,7 +213,7 @@ contract("Wormhole", function () { // Test VAA signed by only 3 signers let threw = false; try { - await bridge.submitVAA("0x010000000203001dbccdb06c91929042b20a136d226890e22b07120d2854aa5c17bc1cce934cf66e2f5e31a3d883bc928346c35352a7627fb0aa7e420b73a89dc0c205780f98bc0001eadd27047cb0988ed4a7c681af758e88c628f2a3c424186044e3fd9ad8c3425f401bfc29674db720f62f08a251ff6aa3b982adb57186422cdad03cc4bfc07bb001020193d92acf2ecadad96273f122ada995700225c18d65db636db7f52e2c77906e3e0153a163c4d123b68f78cc1a8c5dbd4bdf1a26718cfc850c8278ec4a39bb470100000fa010000000390102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x01000000020300e94bec8a17bd313522cdfea30cec5406a41a4cc4b6ec416a633ebe3aca070ae448e370e0a2e7c67fed04a2b825f56cf226c76e6ecd2e71865642393bf729dad80101ccf89506bef58d8cb12baabd60e3304cfb90ef0ef0657caba9c37ffa0d34a54c3aacd1a475ef4c72f24e8d9ce1e2de51e580ce85b18356436b6cda9e2ae9abc0010285f0d3c0d1cd421ce0ae515db1ac3b623c17d4702564971932fb9925c0506fc76e43a7283c712ee680cf058c3c447653c352ca9827b1780e1fc88a61540092d90100000fa010000000390102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") } catch (e) { threw = true; assert.equal(e.reason, "no quorum") @@ -222,6 +221,6 @@ contract("Wormhole", function () { assert.isTrue(threw, "accepted only 3 signatures") // Test VAA signed by 5 signers (all except i=3) - await bridge.submitVAA("0x010000000205001dbccdb06c91929042b20a136d226890e22b07120d2854aa5c17bc1cce934cf66e2f5e31a3d883bc928346c35352a7627fb0aa7e420b73a89dc0c205780f98bc0001eadd27047cb0988ed4a7c681af758e88c628f2a3c424186044e3fd9ad8c3425f401bfc29674db720f62f08a251ff6aa3b982adb57186422cdad03cc4bfc07bb0010393f4821a0fc8248ad8eccfb6e1b6a1fb70d0294a6a2b53cb6e222205f3d9f960491fdda4e23e2dde46b084f4ac101050deecbe871eeec218217037d7974b41a301049571b8d3fbcebad1e868331570120a27cf122d33f3d5b95355fde3712ecdbd5233888ec51e5d9e960beaa9a0697f5ac69f9deae37782b874fbe8aecf064087e00105ddd37a55e2a654f5898b1863eaf8efa464797bfa602893d0bcbcc06269df6a3b4ba88c01f3ad22d23a02c8dc1cb34d28b6eb4dd3e2030b8b42ff6909537faf430000000fa010000000390102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000000de0b6b3a7640000") + await bridge.submitVAA("0x01000000020500e94bec8a17bd313522cdfea30cec5406a41a4cc4b6ec416a633ebe3aca070ae448e370e0a2e7c67fed04a2b825f56cf226c76e6ecd2e71865642393bf729dad80101ccf89506bef58d8cb12baabd60e3304cfb90ef0ef0657caba9c37ffa0d34a54c3aacd1a475ef4c72f24e8d9ce1e2de51e580ce85b18356436b6cda9e2ae9abc001033e9b4ff5fb545e964e907349e3dab0057c408c832bb31fb76fae7f81c3e488ea4897ce14db61c46d1169bd64b449498b1a18dee4de0ef2038b1c7e3a4a0239a0010432eac9532a4c0ce279d6a3018a5ea0d74402eb6969df5d444f20e0cca66d3b4c53e41cb18648f64af100c7410692e83fa16e5696b1f5f0d517653b003e22689800055859330bd1fee76d99728803fa26d739e494e1a232f5658150c2a2c97e1c9722793bdd83bd7cbb4a39b587b45093ee76187c72dfd68d64b7c0abc32bfef5d55c0000000fa010000000390102020105000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000000de0b6b3a7640000") }); }); diff --git a/proto/agent/v1/service.proto b/proto/agent/v1/service.proto index 177adf47..1fd30cfb 100644 --- a/proto/agent/v1/service.proto +++ b/proto/agent/v1/service.proto @@ -46,7 +46,8 @@ message LockupEventNew { bytes targetAddress = 5; uint32 tokenChain = 6; bytes tokenAddress = 7; - bytes amount = 8; + uint32 tokenDecimals = 8; + bytes amount = 9; } // A VAA was posted to Solana for data availability. @@ -58,7 +59,8 @@ message LockupEventVAAPosted { bytes targetAddress = 5; uint32 tokenChain = 6; bytes tokenAddress = 7; - bytes amount = 8; + uint32 tokenDecimals = 8; + bytes amount = 9; - bytes vaa = 9; + bytes vaa = 10; } diff --git a/solana/agent/src/main.rs b/solana/agent/src/main.rs index 7ee4c221..56cdf46a 100644 --- a/solana/agent/src/main.rs +++ b/solana/agent/src/main.rs @@ -183,6 +183,7 @@ impl Agent for AgentImpl { target_address: b.foreign_address.to_vec(), token_chain: b.asset.chain as u32, token_address: b.asset.address.to_vec(), + token_decimals: b.asset.decimals as u32, amount: amount_b.to_vec(), })), } @@ -200,6 +201,7 @@ impl Agent for AgentImpl { target_address: b.foreign_address.to_vec(), token_chain: b.asset.chain as u32, token_address: b.asset.address.to_vec(), + token_decimals: b.asset.decimals as u32, amount: amount_b.to_vec(), vaa: b.vaa.to_vec(), })), diff --git a/solana/bridge/src/instruction.rs b/solana/bridge/src/instruction.rs index 4407916a..5ab88fd4 100644 --- a/solana/bridge/src/instruction.rs +++ b/solana/bridge/src/instruction.rs @@ -14,7 +14,7 @@ use solana_sdk::{ use crate::error::Error; use crate::error::Error::VAATooLong; -use crate::instruction::BridgeInstruction::{CreateWrapped, Initialize, PostVAA, TransferOut}; +use crate::instruction::BridgeInstruction::{Initialize, PostVAA, TransferOut}; use crate::state::{AssetMeta, Bridge, BridgeConfig}; use crate::vaa::{VAABody, VAA}; @@ -123,9 +123,6 @@ pub enum BridgeInstruction { /// Deletes a `ExecutedVAA` after the `VAA_EXPIRATION_TIME` is over to free up space on chain. /// This returns the rent to the sender. EvictClaimedVAA(), - - /// Creates a new wrapped asset - CreateWrapped(AssetMeta), } impl BridgeInstruction { @@ -156,11 +153,6 @@ impl BridgeInstruction { let payload: VAAData = input[1..].to_vec(); PostVAA(payload) } - 5 => { - let payload: &AssetMeta = unpack(input)?; - - CreateWrapped(*payload) - } _ => return Err(ProgramError::InvalidInstructionData), }) } @@ -209,13 +201,6 @@ impl BridgeInstruction { Self::EvictClaimedVAA() => { output[0] = 4; } - Self::CreateWrapped(meta) => { - output[0] = 5; - #[allow(clippy::cast_ptr_alignment)] - let value = - unsafe { &mut *(&mut output[size_of::()] as *mut u8 as *mut AssetMeta) }; - *value = meta; - } } Ok(output) } @@ -261,38 +246,6 @@ pub fn initialize( }) } -/// Creates a 'CreateWrapped' instruction. -#[cfg(not(target_arch = "bpf"))] -pub fn create_wrapped( - program_id: &Pubkey, - payer: &Pubkey, - meta: AssetMeta, -) -> Result { - let data = BridgeInstruction::CreateWrapped(meta).serialize()?; - - let bridge_key = Bridge::derive_bridge_id(program_id)?; - let wrapped_mint_key = - Bridge::derive_wrapped_asset_id(program_id, &bridge_key, meta.chain, meta.address)?; - let wrapped_meta_key = - Bridge::derive_wrapped_meta_id(program_id, &bridge_key, &wrapped_mint_key)?; - - let accounts = vec![ - AccountMeta::new_readonly(*program_id, false), - AccountMeta::new_readonly(solana_sdk::system_program::id(), false), - AccountMeta::new_readonly(spl_token::id(), false), - AccountMeta::new(bridge_key, false), - AccountMeta::new(*payer, true), - AccountMeta::new(wrapped_mint_key, false), - AccountMeta::new(wrapped_meta_key, false), - ]; - - Ok(Instruction { - program_id: *program_id, - accounts, - data, - }) -} - /// Creates an 'TransferOut' instruction. #[cfg(not(target_arch = "bpf"))] pub fn transfer_out( @@ -389,7 +342,6 @@ pub fn post_vaa( )?; accounts.push(AccountMeta::new(transfer_key, false)) } else if t.asset.chain == CHAIN_ID_SOLANA { - println!("kat"); // Foreign (wrapped) -> Solana (native) let mint_key = Pubkey::new(&t.asset.address); let custody_key = Bridge::derive_custody_id(program_id, &bridge_key, &mint_key)?; @@ -398,7 +350,6 @@ pub fn post_vaa( accounts.push(AccountMeta::new(Pubkey::new(&t.target_address), false)); accounts.push(AccountMeta::new(custody_key, false)); } else { - println!("kit"); // Foreign (native) -> Solana (wrapped) let wrapped_key = Bridge::derive_wrapped_asset_id( program_id, diff --git a/solana/bridge/src/processor.rs b/solana/bridge/src/processor.rs index 43f72ab5..c7e9064c 100644 --- a/solana/bridge/src/processor.rs +++ b/solana/bridge/src/processor.rs @@ -61,10 +61,6 @@ impl Bridge { Self::process_vaa(program_id, accounts, vaa_body, &vaa, &hash) } - CreateWrapped(meta) => { - info!("Instruction: CreateWrapped"); - Self::process_create_wrapped(program_id, accounts, &meta) - } _ => panic!(""), } } @@ -158,6 +154,7 @@ impl Bridge { let sender = Bridge::token_account_deserialize(sender_account_info)?; let bridge = Bridge::bridge_deserialize(bridge_info)?; + let mint = Bridge::mint_deserialize(mint_info)?; // Does the token belong to the mint if sender.mint != *mint_info.key { @@ -196,7 +193,7 @@ impl Bridge { // Load transfer account let mut transfer_data = transfer_info.data.borrow_mut(); - let mut transfer: &mut TransferOutProposal = Self::unpack(&mut transfer_data)?; + let mut transfer: &mut TransferOutProposal = Self::unpack_unchecked(&mut transfer_data)?; // Burn tokens Bridge::wrapped_burn( @@ -214,61 +211,13 @@ impl Bridge { transfer.foreign_address = t.target; transfer.amount = t.amount; transfer.to_chain_id = t.chain_id; - transfer.asset = t.asset; - Ok(()) - } - - /// Creates a new wrapped asset - pub fn process_create_wrapped( - program_id: &Pubkey, - accounts: &[AccountInfo], - a: &AssetMeta, - ) -> ProgramResult { - info!("create wrapped"); - let account_info_iter = &mut accounts.iter(); - next_account_info(account_info_iter)?; // Bridge program - next_account_info(account_info_iter)?; // System program - next_account_info(account_info_iter)?; // Token program - let bridge_info = next_account_info(account_info_iter)?; - let payer_info = next_account_info(account_info_iter)?; - let mint_info = next_account_info(account_info_iter)?; - let wrapped_meta_info = next_account_info(account_info_iter)?; - - let bridge = Bridge::bridge_deserialize(bridge_info)?; - - if a.chain == CHAIN_ID_SOLANA { - return Err(Error::CannotWrapNative.into()); - } - - // Create wrapped mint - Self::create_wrapped_mint( - program_id, - accounts, - &bridge.config.token_program, - mint_info.key, - bridge_info.key, - payer_info.key, - &a, - )?; - - // Check and create wrapped asset meta to allow reverse resolution of info - let wrapped_meta_seeds = Bridge::derive_wrapped_meta_seeds(bridge_info.key, mint_info.key); - Bridge::check_and_create_account::( - program_id, - accounts, - wrapped_meta_info.key, - payer_info.key, - program_id, - &wrapped_meta_seeds, - )?; - - let mut wrapped_meta_data = wrapped_meta_info.data.borrow_mut(); - let wrapped_meta: &mut WrappedAssetMeta = Bridge::unpack_unchecked(&mut wrapped_meta_data)?; - - wrapped_meta.is_initialized = true; - wrapped_meta.address = a.address; - wrapped_meta.chain = a.chain; + // Make sure decimals are correct + transfer.asset = AssetMeta { + chain: t.asset.chain, // Chain and address cannot be spoofed because the account is derived from it + address: t.asset.address, + decimals: mint.decimals, // We use the info from mint because it can be spoofed + }; Ok(()) } @@ -292,6 +241,7 @@ impl Bridge { let custody_info = next_account_info(account_info_iter)?; let sender = Bridge::token_account_deserialize(sender_account_info)?; + let mint = Bridge::mint_deserialize(mint_info)?; let bridge = Bridge::bridge_deserialize(bridge_info)?; // Does the token belong to the mint @@ -374,6 +324,7 @@ impl Bridge { transfer.asset = AssetMeta { chain: CHAIN_ID_SOLANA, address: mint_info.key.to_bytes(), + decimals: mint.decimals, }; Ok(()) @@ -589,15 +540,52 @@ impl Bridge { b.amount, )?; } else { - // Foreign chain asset, mint wrapped asset - let expected_mint_address = Bridge::derive_wrapped_asset_id( - program_id, - bridge_info.key, - b.asset.chain, - b.asset.address, - )?; - if expected_mint_address != *mint_info.key { - return Err(Error::InvalidDerivedAccount.into()); + // Create wrapped asset if it does not exist + if mint_info.data_is_empty() { + let meta_info = next_account_info(account_info_iter)?; + + // Foreign chain asset, mint wrapped asset + let expected_mint_address = Bridge::derive_wrapped_asset_id( + program_id, + bridge_info.key, + b.asset.chain, + b.asset.address, + )?; + if expected_mint_address != *mint_info.key { + return Err(Error::InvalidDerivedAccount.into()); + } + + // Create wrapped mint + Self::create_wrapped_mint( + program_id, + accounts, + &bridge.config.token_program, + mint_info.key, + bridge_info.key, + payer_info.key, + &b.asset, + b.asset.decimals, + )?; + + // Check and create wrapped asset meta to allow reverse resolution of info + let wrapped_meta_seeds = + Bridge::derive_wrapped_meta_seeds(bridge_info.key, mint_info.key); + Bridge::check_and_create_account::( + program_id, + accounts, + meta_info.key, + payer_info.key, + program_id, + &wrapped_meta_seeds, + )?; + + let mut wrapped_meta_data = meta_info.data.borrow_mut(); + let wrapped_meta: &mut WrappedAssetMeta = + Bridge::unpack_unchecked(&mut wrapped_meta_data)?; + + wrapped_meta.is_initialized = true; + wrapped_meta.address = b.asset.address; + wrapped_meta.chain = b.asset.chain; } // This automatically asserts that the mint was created by this account by using @@ -624,6 +612,7 @@ impl Bridge { b: &BodyTransfer, vaa_data: VAAData, ) -> ProgramResult { + info!("posting VAA"); let proposal_info = next_account_info(account_info_iter)?; // Check whether the proposal was derived correctly @@ -784,6 +773,7 @@ impl Bridge { bridge: &Pubkey, payer: &Pubkey, asset: &AssetMeta, + decimals: u8, ) -> Result<(), ProgramError> { Self::check_and_create_account::( program_id, @@ -799,7 +789,7 @@ impl Bridge { None, Some(&Self::derive_bridge_id(program_id)?), 0, - 18, + decimals, )?; invoke_signed(&ix, accounts, &[]) } diff --git a/solana/bridge/src/state.rs b/solana/bridge/src/state.rs index 83839fd8..3a755abc 100644 --- a/solana/bridge/src/state.rs +++ b/solana/bridge/src/state.rs @@ -136,6 +136,9 @@ pub struct AssetMeta { /// Chain of the token pub chain: u8, + + /// Number of decimals of the token + pub decimals: u8, } /// Config for a bridge. diff --git a/solana/bridge/src/vaa.rs b/solana/bridge/src/vaa.rs index baa1a22e..a2799879 100644 --- a/solana/bridge/src/vaa.rs +++ b/solana/bridge/src/vaa.rs @@ -262,6 +262,7 @@ impl BodyTransfer { let token_chain = data.read_u8()?; let mut token_address: ForeignAddress = ForeignAddress::default(); data.read_exact(&mut token_address)?; + let token_decimals = data.read_u8()?; let mut am_data: [u8; 32] = [0; 32]; data.read_exact(&mut am_data)?; @@ -276,6 +277,7 @@ impl BodyTransfer { asset: AssetMeta { address: token_address, chain: token_chain, + decimals: token_decimals, }, amount, }) @@ -290,6 +292,7 @@ impl BodyTransfer { v.write(&self.target_address)?; v.write_u8(self.asset.chain)?; v.write(&self.asset.address)?; + v.write_u8(self.asset.decimals)?; let mut am_data: [u8; 32] = [0; 32]; self.amount.to_big_endian(&mut am_data); @@ -328,6 +331,7 @@ mod tests { asset: AssetMeta { address: [2; 32], chain: 8, + decimals: 9, }, amount: U256::from(3), })), @@ -431,11 +435,12 @@ mod tests { 158, 135, 169, 32, 6, 88, 217, 196, 14, 153, 136, ], chain: 1, + decimals: 8, }, amount: U256::from_dec_str("5000000000000000000").unwrap(), })), }; - let data = hex::decode("0100000000010092737a1504f3b3df8c93cb85c64a4860bb270e26026b6e37f095356a406f6af439c6b2e9775fa1c6669525f06edab033ba5d447308f4e3bdb33c0f361dc32ec3015f37000810000000350102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e99880000000000000000000000000000000000000000000000004563918244f40000").unwrap(); + let data = hex::decode("0100000000010092737a1504f3b3df8c93cb85c64a4860bb270e26026b6e37f095356a406f6af439c6b2e9775fa1c6669525f06edab033ba5d447308f4e3bdb33c0f361dc32ec3015f37000810000000350102020104000000000000000000000000000000000000000000000000000000000000000000000000000000000090f8bf6a479f320ead074411a4b0e7944ea8c9c1010000000000000000000000000347ef34687bdc9f189e87a9200658d9c40e9988080000000000000000000000000000000000000000000000004563918244f40000").unwrap(); let parsed_vaa = VAA::deserialize(data.as_slice()).unwrap(); assert_eq!(vaa, parsed_vaa); diff --git a/solana/cli/src/main.rs b/solana/cli/src/main.rs index 9f6c4787..64877e91 100644 --- a/solana/cli/src/main.rs +++ b/solana/cli/src/main.rs @@ -112,11 +112,13 @@ fn command_lock_tokens( AssetMeta { address: wrapped_meta.address, chain: wrapped_meta.chain, + decimals: 0, } } Err(e) => AssetMeta { address: token.to_bytes(), chain: CHAIN_ID_SOLANA, + decimals: 0, }, }; @@ -161,30 +163,6 @@ fn command_lock_tokens( Ok(Some(transaction)) } -fn command_create_wrapped_asset( - config: &Config, - bridge: &Pubkey, - meta: AssetMeta, -) -> CommmandResult { - println!("Creating wrapped asset"); - - let minimum_balance_for_rent_exemption = config - .rpc_client - .get_minimum_balance_for_rent_exemption(size_of::())?; - - let ix = create_wrapped(bridge, &config.owner.pubkey(), meta)?; - - let mut transaction = Transaction::new_with_payer(&[ix], Some(&config.fee_payer.pubkey())); - - let (recent_blockhash, fee_calculator) = config.rpc_client.get_recent_blockhash()?; - check_fee_payer_balance( - config, - minimum_balance_for_rent_exemption + fee_calculator.calculate_fee(&transaction.message()), - )?; - transaction.sign(&[&config.fee_payer, &config.owner], recent_blockhash); - Ok(Some(transaction)) -} - fn command_submit_vaa(config: &Config, bridge: &Pubkey, vaa: &[u8]) -> CommmandResult { println!("Submitting VAA"); @@ -976,40 +954,6 @@ fn main() { .help("The vaa to be posted"), ) ) - .subcommand( - SubCommand::with_name("create-wrapped") - .about("Create new wrapped asset and token account") - .arg( - Arg::with_name("bridge") - .long("bridge") - .value_name("BRIDGE_KEY") - .validator(is_pubkey_or_keypair) - .takes_value(true) - .index(1) - .required(true) - .help( - "Specify the bridge program public key" - ), - ) - .arg( - Arg::with_name("chain") - .validator(is_u8) - .value_name("CHAIN") - .takes_value(true) - .index(2) - .required(true) - .help("Chain ID of the asset"), - ) - .arg( - Arg::with_name("token") - .validator(is_hex) - .value_name("TOKEN_ADDRESS") - .takes_value(true) - .index(3) - .required(true) - .help("Token address of the asset"), - ) - ) .subcommand( SubCommand::with_name("wrapped-address") .about("Derive wrapped asset address") @@ -1170,24 +1114,6 @@ fn main() { let vaa = hex::decode(vaa_string).unwrap(); command_submit_vaa(&config, &bridge, vaa.as_slice()) } - ("create-wrapped", Some(arg_matches)) => { - let bridge = pubkey_of(arg_matches, "bridge").unwrap(); - let chain = value_t_or_exit!(arg_matches, "chain", u8); - let addr_string: String = value_of(arg_matches, "token").unwrap(); - let addr_data = hex::decode(addr_string).unwrap(); - - let mut token_addr = [0u8; 32]; - token_addr.copy_from_slice(addr_data.as_slice()); - - command_create_wrapped_asset( - &config, - &bridge, - AssetMeta { - chain, - address: token_addr, - }, - ) - } ("wrapped-address", Some(arg_matches)) => { let bridge = pubkey_of(arg_matches, "bridge").unwrap(); let chain = value_t_or_exit!(arg_matches, "chain", u8); diff --git a/third_party/solana/Add_crypto_syscalls.patch b/third_party/solana/Add_crypto_syscalls.patch index df14a6f1..1597559d 100644 --- a/third_party/solana/Add_crypto_syscalls.patch +++ b/third_party/solana/Add_crypto_syscalls.patch @@ -734,3 +734,23 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP echo "${genesis_args[@]}" > spl-genesis-args.sh echo +Index: account-decoder/src/parse_token.rs +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- account-decoder/src/parse_token.rs (revision 97144cdb8e9cb4d83943b0b5898d08f57844a4dd) ++++ account-decoder/src/parse_token.rs (date 1598606089966) +@@ -30,11 +30,7 @@ + if data.len() == size_of::() { + let account: Account = *unpack(&mut data) + .map_err(|_| ParseAccountError::AccountNotParsable(ParsableAccount::SplToken))?; +- let decimals = mint_decimals.ok_or_else(|| { +- ParseAccountError::AdditionalDataMissing( +- "no mint_decimals provided to parse spl-token account".to_string(), +- ) +- })?; ++ let decimals = mint_decimals.or(Some(0)).unwrap(); + Ok(TokenAccountType::Account(UiTokenAccount { + mint: account.mint.to_string(), + owner: account.owner.to_string(), diff --git a/web/contracts/Wormhole.json b/web/contracts/Wormhole.json index c50a7fd2..bf24e9b2 100644 --- a/web/contracts/Wormhole.json +++ b/web/contracts/Wormhole.json @@ -27,7 +27,7 @@ }, { "internalType": "uint32", - "name": "_vaa_expiry", + "name": "_guardian_set_expirity", "type": "uint32" } ], @@ -68,6 +68,12 @@ "name": "token_chain", "type": "uint8" }, + { + "indexed": false, + "internalType": "uint8", + "name": "token_decimals", + "type": "uint8" + }, { "indexed": true, "internalType": "bytes32", @@ -106,6 +112,38 @@ "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "consumedVAAs", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "guardian_set_expirity", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "guardian_set_index", @@ -157,19 +195,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "vaa_expiry", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "wrappedAssetMaster", @@ -307,25 +332,25 @@ "type": "function" } ], - "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"struct Wormhole.GuardianSet\",\"name\":\"initial_guardian_set\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wrapped_asset_master\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_vaa_expiry\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"oldGuardianIndex\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newGuardianIndex\",\"type\":\"uint32\"}],\"name\":\"LogGuardianSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_chain\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"token\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"LogTokensLocked\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"idx\",\"type\":\"uint32\"}],\"name\":\"getGuardianSet\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"struct Wormhole.GuardianSet\",\"name\":\"gs\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_index\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"guardian_sets\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWrappedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"vaa\",\"type\":\"bytes\"}],\"name\":\"submitVAA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaa_expiry\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedAssetMaster\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"wrappedAssets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol\":\"Wormhole\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/BytesLib.sol\":{\"keccak256\":\"0x4a28e69afc4c1c1aee48c7b497f9b8452b295ddcf4bbf453d594a1467016d5f2\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://279e22c43f79567e9f7842cfca8ad2329bbbad2eac30413b620796d51f308719\",\"dweb:/ipfs/QmbdRLJYoKJxDbDLeverNMHsNFEcxnohAA713UFLjLm3Jy\"]},\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol\":{\"keccak256\":\"0x94eedbafd3d2acad7a8a0092fd889d97c2b51ef9950fd7bdd5c0da2d15c741d5\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://8e4320749035e719bd8f833b062e4548d829182118f126b80c0cbc482bb1d41d\",\"dweb:/ipfs/QmYubVxQafG6YCQS25ZMnTcqo8EGBCQVx5Kuq1VJLmfzkb\"]},\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/WrappedAsset.sol\":{\"keccak256\":\"0x029a9b6e1df05a76c4c09570bf403eb91a2df33acdb0b7414e950f35fa240b97\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://a1d5d79ed2fdbe41c9eb88971ab0c7677b66579d6ef322a5eb7b23bf8fc9f891\",\"dweb:/ipfs/QmPRZWXa3hx87fJ9u14rDxZ7mYXL2EjQHcDmC2jYZEDMNW\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3\",\"dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff\",\"dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x7ff0067f2d7df4187eaa1cb4800949b929602c9d9cb20fcaee6922a7613ef2fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78aa63fd7fbb8df2942b6c6e7bd89349507e306edbd5909ee8d9575c31be57e5\",\"dweb:/ipfs/Qmf6z9KWKCJCfEVokgTBhBVq5yHtE6is31N8AV5BHdMkqQ\"]}},\"version\":1}", - "bytecode": "0x60806040526002600160146101000a81548160ff021916908360ff1602179055503480156200002d57600080fd5b506040516200370b3803806200370b83398181016040528101906200005391906200033e565b600160008190555082600260008063ffffffff1681526020019081526020016000206000820151816000019080519060200190620000939291906200014b565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055509050506000600360006101000a81548163ffffffff021916908363ffffffff16021790555080600360046101000a81548163ffffffff021916908363ffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200047c565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200016c565b5b509050620001d69190620001da565b5090565b5b808211156200021357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620001db565b5090565b600081519050620002288162000448565b92915050565b600082601f8301126200024057600080fd5b8151620002576200025182620003db565b620003ad565b915081818352602084019350602081019050838560208402820111156200027d57600080fd5b60005b83811015620002b1578162000296888262000217565b84526020840193506020830192505060018101905062000280565b5050505092915050565b600060408284031215620002ce57600080fd5b620002da6040620003ad565b9050600082015167ffffffffffffffff811115620002f757600080fd5b62000305848285016200022e565b60008301525060206200031b8482850162000327565b60208301525092915050565b600081519050620003388162000462565b92915050565b6000806000606084860312156200035457600080fd5b600084015167ffffffffffffffff8111156200036f57600080fd5b6200037d86828701620002bb565b9350506020620003908682870162000217565b9250506040620003a38682870162000327565b9150509250925092565b6000604051905081810181811067ffffffffffffffff82111715620003d157600080fd5b8060405250919050565b600067ffffffffffffffff821115620003f357600080fd5b602082029050602081019050919050565b6000620004118262000418565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b620004538162000404565b81146200045f57600080fd5b50565b6200046d8162000438565b81146200047957600080fd5b50565b61327f806200048c6000396000f3fe6080604052600436106100955760003560e01c80637f04d9e6116100595780637f04d9e6146101f8578063822d82b31461022357806399da1d3c1461024e578063b6694c2a14610279578063f951975a146102b6576100d5565b806313cca1a9146101105780631a2be4da146101395780633bc0aee61461017657806342b0aefa1461019f57806358d62e46146101dc576100d5565b366100d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100cc90612da0565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010790612da0565b60405180910390fd5b34801561011c57600080fd5b5061013760048036038101906101329190612371565b6102f3565b005b34801561014557600080fd5b50610160600480360381019061015b9190612348565b610745565b60405161016d9190612cde565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906124b2565b610765565b005b3480156101ab57600080fd5b506101c660048036038101906101c19190612520565b611091565b6040516101d39190612f82565b60405180910390f35b6101f660048036038101906101f19190612463565b6110bf565b005b34801561020457600080fd5b5061020d611269565b60405161021a9190612f82565b60405180910390f35b34801561022f57600080fd5b5061023861127f565b6040516102459190612f82565b60405180910390f35b34801561025a57600080fd5b50610263611295565b6040516102709190612c1f565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612411565b6112bb565b6040516102ad9190612c1f565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612520565b6112ee565b6040516102ea9190612f60565b60405180910390f35b60026000541415610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090612f40565b60405180910390fd5b60026000819055506000841415610385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037c90612e80565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561055f578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610428929190612c55565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104a057600080fd5b505afa1580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190612549565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052057600080fd5b505afa158015610534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610558919061243a565b90506106da565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161059a9190612c3a565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea91906124f7565b90506106193330898b73ffffffffffffffffffffffffffffffffffffffff166113db909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106549190612c3a565b60206040518083038186803b15801561066c57600080fd5b505afa158015610680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a491906124f7565b90506106b9828261146490919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e24208685898b8960405161072c959493929190612fef565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b600260005414156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290612f40565b60405180910390fd5b6002600081905550600061080d600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b905060018160ff1614610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e00565b60405180910390fd5b60006108af600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b9050600061090b600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b60ff169050600081604202600601905060006109748288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b905042600360049054906101000a900463ffffffff16820163ffffffff16116109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990612e20565b60405180910390fd5b6000610a3283848a8a9050038a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390612d80565b60405180910390fd5b610aa461215c565b600260008763ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b5357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b09575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610ba6575042816020015163ffffffff16115b610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90612ec0565b60405180910390fd5b846001600460038460000151510281610bfa57fe5b04011115610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612e60565b60405180910390fd5b60005b85811015610eb9576000610ca7604283026006018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506000610d08604284026007018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610d69604285026027018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610dca604286026047018f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b9050601b8101905085600001518460ff1681518110610de557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e269493929190612cf9565b6020604051602081039080840390855afa158015610e48573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612e40565b60405180910390fd5b505050508080600101915050610c40565b506000610f16600486018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506060610f7e60058701600588018d8d9050038d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b905060018260ff161415610ffa57600360009054906101000a900463ffffffff1663ffffffff168863ffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612dc0565b60405180910390fd5b610ff58161168a565b611050565b60108260ff1614156110145761100f81611908565b61104f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690612d60565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b60026000541415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612f40565b60405180910390fd5b60026000819055506000341415611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612e80565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e242084600160149054906101000a900460ff16873487604051611254959493929190612fef565b60405180910390a36001600081905550505050565b600360049054906101000a900463ffffffff1681565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f661215c565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113a557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161135b575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b61145e846323b872dd60e01b8585856040516024016113fc93929190612c7e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b50505050565b60006114a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c85565b905092915050565b600060018201835110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90612de0565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90612de0565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990612de0565b60405180910390fd5b60608215600081146115cf57604051915060208201604052611620565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561160d57805183526020830192506020810190506115f0565b50868552601f19601f8301166040525050505b50809150509392505050565b60006020820183511015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b60006116a060008361150c90919063ffffffff16565b905060006116b86004846114ae90919063ffffffff16565b905060608160ff1667ffffffffffffffff811180156116d657600080fd5b506040519080825280602002602001820160405280156117055781602001602082028036833780820191505090505b50905060005b8260ff168110156117885760006117316014830260050187611ce090919063ffffffff16565b90508083838151811061174057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061170b565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117c961215c565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020600082015181600001908051906020019061183592919061217c565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff166040516118f8929190612f9d565b60405180910390a1505050505050565b600061191e6004836114ae90919063ffffffff16565b905060006119366005846114ae90919063ffffffff16565b9050600061194e603285611ce090919063ffffffff16565b905060006119666046866114ae90919063ffffffff16565b9050600061197e606787611d4d90919063ffffffff16565b90508360ff168560ff1614156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090612f20565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790612ea0565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611b71576000611a5260478861162c90919063ffffffff16565b905060008382604051602001611a69929190612bf3565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afc57611af9828685611dab565b90505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b37929190612cb5565b600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b50505050505050611bb6565b6000611b87605388611ce090919063ffffffff16565b9050611bb484838373ffffffffffffffffffffffffffffffffffffffff16611f509092919063ffffffff16565b505b505050505050565b6060611c20826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611fd69092919063ffffffff16565b9050600081511115611c805780806020019051810190611c4091906123e8565b611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612f00565b60405180910390fd5b5b505050565b6000838311158290611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc49190612d3e565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090612de0565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250508173ffffffffffffffffffffffffffffffffffffffff166302a0958585856040518363ffffffff1660e01b8152600401611e6c929190612fc6565b600060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50505050816005600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550509392505050565b611fd18363a9059cbb60e01b8484604051602401611f6f929190612cb5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b505050565b6060611fe58484600085611fee565b90509392505050565b6060611ff985612111565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90612ee0565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120629190612bdc565b60006040518083038185875af1925050503d806000811461209f576040519150601f19603f3d011682016040523d82523d6000602084013e6120a4565b606091505b509150915081156120b9578092505050612109565b6000815111156120cc5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121009190612d3e565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561215357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b8280548282559060005260206000209081019282156121f5579160200282015b828111156121f45782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061219c565b5b5090506122029190612206565b5090565b5b8082111561223d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612207565b5090565b600081359050612250816131bf565b92915050565b600081519050612265816131d6565b92915050565b60008135905061227a816131ed565b92915050565b60008151905061228f816131ed565b92915050565b60008083601f8401126122a757600080fd5b8235905067ffffffffffffffff8111156122c057600080fd5b6020830191508360018202830111156122d857600080fd5b9250929050565b6000813590506122ee81613204565b92915050565b60008151905061230381613204565b92915050565b6000813590506123188161321b565b92915050565b60008135905061232d81613232565b92915050565b60008151905061234281613232565b92915050565b60006020828403121561235a57600080fd5b600061236884828501612241565b91505092915050565b600080600080600060a0868803121561238957600080fd5b600061239788828901612241565b95505060206123a8888289016122df565b94505060406123b98882890161226b565b93505060606123ca8882890161231e565b92505060806123db88828901612309565b9150509295509295909350565b6000602082840312156123fa57600080fd5b600061240884828501612256565b91505092915050565b60006020828403121561242357600080fd5b60006124318482850161226b565b91505092915050565b60006020828403121561244c57600080fd5b600061245a84828501612280565b91505092915050565b60008060006060848603121561247857600080fd5b60006124868682870161226b565b93505060206124978682870161231e565b92505060406124a886828701612309565b9150509250925092565b600080602083850312156124c557600080fd5b600083013567ffffffffffffffff8111156124df57600080fd5b6124eb85828601612295565b92509250509250929050565b60006020828403121561250957600080fd5b6000612517848285016122f4565b91505092915050565b60006020828403121561253257600080fd5b600061254084828501612309565b91505092915050565b60006020828403121561255b57600080fd5b600061256984828501612333565b91505092915050565b600061257e8383612599565b60208301905092915050565b6125938161311c565b82525050565b6125a2816130ad565b82525050565b6125b1816130ad565b82525050565b60006125c282613052565b6125cc8185613080565b93506125d783613042565b8060005b838110156126085781516125ef8882612572565b97506125fa83613073565b9250506001810190506125db565b5085935050505092915050565b61261e816130bf565b82525050565b61262d816130cb565b82525050565b61264461263f826130cb565b613185565b82525050565b60006126558261305d565b61265f8185613091565b935061266f818560208601613152565b80840191505092915050565b600061268682613068565b612690818561309c565b93506126a0818560208601613152565b6126a9816131a1565b840191505092915050565b60006126c160128361309c565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b600061270160188361309c565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b6000612741602c8361309c565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b60006127a760398361309c565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061280d60128361309c565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b600061284d60188361309c565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b600061288d600f8361309c565b91507f56414120686173206578706972656400000000000000000000000000000000006000830152602082019050919050565b60006128cd60158361309c565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061290d60098361309c565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061294d60148361309c565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b600061298d60198361309c565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129cd60188361309c565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a0d601d8361309c565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a4d602a8361309c565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ab360268361309c565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b19601f8361309c565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b6982826125b7565b9150506020830151612b7e6020860182612b98565b508091505092915050565b612b92816130f5565b82525050565b612ba1816130ff565b82525050565b612bb0816130ff565b82525050565b612bbf8161310f565b82525050565b612bd6612bd18261310f565b61318f565b82525050565b6000612be8828461264a565b915081905092915050565b6000612bff8285612bc5565b600182019150612c0f8284612633565b6020820191508190509392505050565b6000602082019050612c3460008301846125a8565b92915050565b6000602082019050612c4f600083018461258a565b92915050565b6000604082019050612c6a600083018561258a565b612c776020830184612b89565b9392505050565b6000606082019050612c9360008301866125a8565b612ca060208301856125a8565b612cad6040830184612b89565b949350505050565b6000604082019050612cca60008301856125a8565b612cd76020830184612b89565b9392505050565b6000602082019050612cf36000830184612615565b92915050565b6000608082019050612d0e6000830187612624565b612d1b6020830186612bb6565b612d286040830185612624565b612d356060830184612624565b95945050505050565b60006020820190508181036000830152612d58818461267b565b905092915050565b60006020820190508181036000830152612d79816126b4565b9050919050565b60006020820190508181036000830152612d99816126f4565b9050919050565b60006020820190508181036000830152612db981612734565b9050919050565b60006020820190508181036000830152612dd98161279a565b9050919050565b60006020820190508181036000830152612df981612800565b9050919050565b60006020820190508181036000830152612e1981612840565b9050919050565b60006020820190508181036000830152612e3981612880565b9050919050565b60006020820190508181036000830152612e59816128c0565b9050919050565b60006020820190508181036000830152612e7981612900565b9050919050565b60006020820190508181036000830152612e9981612940565b9050919050565b60006020820190508181036000830152612eb981612980565b9050919050565b60006020820190508181036000830152612ed9816129c0565b9050919050565b60006020820190508181036000830152612ef981612a00565b9050919050565b60006020820190508181036000830152612f1981612a40565b9050919050565b60006020820190508181036000830152612f3981612aa6565b9050919050565b60006020820190508181036000830152612f5981612b0c565b9050919050565b60006020820190508181036000830152612f7a8184612b4c565b905092915050565b6000602082019050612f976000830184612ba7565b92915050565b6000604082019050612fb26000830185612ba7565b612fbf6020830184612ba7565b9392505050565b6000604082019050612fdb6000830185612bb6565b612fe86020830184612624565b9392505050565b600060a0820190506130046000830188612bb6565b6130116020830187612bb6565b61301e6040830186612624565b61302b6060830185612b89565b6130386080830184612ba7565b9695505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006130b8826130d5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131278261312e565b9050919050565b600061313982613140565b9050919050565b600061314b826130d5565b9050919050565b60005b83811015613170578082015181840152602081019050613155565b8381111561317f576000848401525b50505050565b6000819050919050565b600061319a826131b2565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b6131c8816130ad565b81146131d357600080fd5b50565b6131df816130bf565b81146131ea57600080fd5b50565b6131f6816130cb565b811461320157600080fd5b50565b61320d816130f5565b811461321857600080fd5b50565b613224816130ff565b811461322f57600080fd5b50565b61323b8161310f565b811461324657600080fd5b5056fea2646970667358221220093e64f2de68a8ba56b15335745c5182b42d2cffc846382a42044fbb6a6793ec64736f6c634300060c0033", - "deployedBytecode": "0x6080604052600436106100955760003560e01c80637f04d9e6116100595780637f04d9e6146101f8578063822d82b31461022357806399da1d3c1461024e578063b6694c2a14610279578063f951975a146102b6576100d5565b806313cca1a9146101105780631a2be4da146101395780633bc0aee61461017657806342b0aefa1461019f57806358d62e46146101dc576100d5565b366100d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100cc90612da0565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010790612da0565b60405180910390fd5b34801561011c57600080fd5b5061013760048036038101906101329190612371565b6102f3565b005b34801561014557600080fd5b50610160600480360381019061015b9190612348565b610745565b60405161016d9190612cde565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906124b2565b610765565b005b3480156101ab57600080fd5b506101c660048036038101906101c19190612520565b611091565b6040516101d39190612f82565b60405180910390f35b6101f660048036038101906101f19190612463565b6110bf565b005b34801561020457600080fd5b5061020d611269565b60405161021a9190612f82565b60405180910390f35b34801561022f57600080fd5b5061023861127f565b6040516102459190612f82565b60405180910390f35b34801561025a57600080fd5b50610263611295565b6040516102709190612c1f565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612411565b6112bb565b6040516102ad9190612c1f565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612520565b6112ee565b6040516102ea9190612f60565b60405180910390f35b60026000541415610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090612f40565b60405180910390fd5b60026000819055506000841415610385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037c90612e80565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561055f578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610428929190612c55565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104a057600080fd5b505afa1580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190612549565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052057600080fd5b505afa158015610534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610558919061243a565b90506106da565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161059a9190612c3a565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea91906124f7565b90506106193330898b73ffffffffffffffffffffffffffffffffffffffff166113db909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106549190612c3a565b60206040518083038186803b15801561066c57600080fd5b505afa158015610680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a491906124f7565b90506106b9828261146490919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e24208685898b8960405161072c959493929190612fef565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b600260005414156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290612f40565b60405180910390fd5b6002600081905550600061080d600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b905060018160ff1614610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e00565b60405180910390fd5b60006108af600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b9050600061090b600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b60ff169050600081604202600601905060006109748288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b905042600360049054906101000a900463ffffffff16820163ffffffff16116109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990612e20565b60405180910390fd5b6000610a3283848a8a9050038a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390612d80565b60405180910390fd5b610aa461215c565b600260008763ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b5357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b09575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610ba6575042816020015163ffffffff16115b610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90612ec0565b60405180910390fd5b846001600460038460000151510281610bfa57fe5b04011115610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612e60565b60405180910390fd5b60005b85811015610eb9576000610ca7604283026006018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506000610d08604284026007018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610d69604285026027018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610dca604286026047018f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b9050601b8101905085600001518460ff1681518110610de557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e269493929190612cf9565b6020604051602081039080840390855afa158015610e48573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612e40565b60405180910390fd5b505050508080600101915050610c40565b506000610f16600486018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506060610f7e60058701600588018d8d9050038d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b905060018260ff161415610ffa57600360009054906101000a900463ffffffff1663ffffffff168863ffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612dc0565b60405180910390fd5b610ff58161168a565b611050565b60108260ff1614156110145761100f81611908565b61104f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690612d60565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b60026000541415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612f40565b60405180910390fd5b60026000819055506000341415611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612e80565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e242084600160149054906101000a900460ff16873487604051611254959493929190612fef565b60405180910390a36001600081905550505050565b600360049054906101000a900463ffffffff1681565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f661215c565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113a557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161135b575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b61145e846323b872dd60e01b8585856040516024016113fc93929190612c7e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b50505050565b60006114a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c85565b905092915050565b600060018201835110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90612de0565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90612de0565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990612de0565b60405180910390fd5b60608215600081146115cf57604051915060208201604052611620565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561160d57805183526020830192506020810190506115f0565b50868552601f19601f8301166040525050505b50809150509392505050565b60006020820183511015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b60006116a060008361150c90919063ffffffff16565b905060006116b86004846114ae90919063ffffffff16565b905060608160ff1667ffffffffffffffff811180156116d657600080fd5b506040519080825280602002602001820160405280156117055781602001602082028036833780820191505090505b50905060005b8260ff168110156117885760006117316014830260050187611ce090919063ffffffff16565b90508083838151811061174057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061170b565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117c961215c565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020600082015181600001908051906020019061183592919061217c565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff166040516118f8929190612f9d565b60405180910390a1505050505050565b600061191e6004836114ae90919063ffffffff16565b905060006119366005846114ae90919063ffffffff16565b9050600061194e603285611ce090919063ffffffff16565b905060006119666046866114ae90919063ffffffff16565b9050600061197e606787611d4d90919063ffffffff16565b90508360ff168560ff1614156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090612f20565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790612ea0565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611b71576000611a5260478861162c90919063ffffffff16565b905060008382604051602001611a69929190612bf3565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afc57611af9828685611dab565b90505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b37929190612cb5565b600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b50505050505050611bb6565b6000611b87605388611ce090919063ffffffff16565b9050611bb484838373ffffffffffffffffffffffffffffffffffffffff16611f509092919063ffffffff16565b505b505050505050565b6060611c20826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611fd69092919063ffffffff16565b9050600081511115611c805780806020019051810190611c4091906123e8565b611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612f00565b60405180910390fd5b5b505050565b6000838311158290611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc49190612d3e565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090612de0565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250508173ffffffffffffffffffffffffffffffffffffffff166302a0958585856040518363ffffffff1660e01b8152600401611e6c929190612fc6565b600060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50505050816005600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550509392505050565b611fd18363a9059cbb60e01b8484604051602401611f6f929190612cb5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b505050565b6060611fe58484600085611fee565b90509392505050565b6060611ff985612111565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90612ee0565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120629190612bdc565b60006040518083038185875af1925050503d806000811461209f576040519150601f19603f3d011682016040523d82523d6000602084013e6120a4565b606091505b509150915081156120b9578092505050612109565b6000815111156120cc5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121009190612d3e565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561215357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b8280548282559060005260206000209081019282156121f5579160200282015b828111156121f45782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061219c565b5b5090506122029190612206565b5090565b5b8082111561223d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612207565b5090565b600081359050612250816131bf565b92915050565b600081519050612265816131d6565b92915050565b60008135905061227a816131ed565b92915050565b60008151905061228f816131ed565b92915050565b60008083601f8401126122a757600080fd5b8235905067ffffffffffffffff8111156122c057600080fd5b6020830191508360018202830111156122d857600080fd5b9250929050565b6000813590506122ee81613204565b92915050565b60008151905061230381613204565b92915050565b6000813590506123188161321b565b92915050565b60008135905061232d81613232565b92915050565b60008151905061234281613232565b92915050565b60006020828403121561235a57600080fd5b600061236884828501612241565b91505092915050565b600080600080600060a0868803121561238957600080fd5b600061239788828901612241565b95505060206123a8888289016122df565b94505060406123b98882890161226b565b93505060606123ca8882890161231e565b92505060806123db88828901612309565b9150509295509295909350565b6000602082840312156123fa57600080fd5b600061240884828501612256565b91505092915050565b60006020828403121561242357600080fd5b60006124318482850161226b565b91505092915050565b60006020828403121561244c57600080fd5b600061245a84828501612280565b91505092915050565b60008060006060848603121561247857600080fd5b60006124868682870161226b565b93505060206124978682870161231e565b92505060406124a886828701612309565b9150509250925092565b600080602083850312156124c557600080fd5b600083013567ffffffffffffffff8111156124df57600080fd5b6124eb85828601612295565b92509250509250929050565b60006020828403121561250957600080fd5b6000612517848285016122f4565b91505092915050565b60006020828403121561253257600080fd5b600061254084828501612309565b91505092915050565b60006020828403121561255b57600080fd5b600061256984828501612333565b91505092915050565b600061257e8383612599565b60208301905092915050565b6125938161311c565b82525050565b6125a2816130ad565b82525050565b6125b1816130ad565b82525050565b60006125c282613052565b6125cc8185613080565b93506125d783613042565b8060005b838110156126085781516125ef8882612572565b97506125fa83613073565b9250506001810190506125db565b5085935050505092915050565b61261e816130bf565b82525050565b61262d816130cb565b82525050565b61264461263f826130cb565b613185565b82525050565b60006126558261305d565b61265f8185613091565b935061266f818560208601613152565b80840191505092915050565b600061268682613068565b612690818561309c565b93506126a0818560208601613152565b6126a9816131a1565b840191505092915050565b60006126c160128361309c565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b600061270160188361309c565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b6000612741602c8361309c565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b60006127a760398361309c565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061280d60128361309c565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b600061284d60188361309c565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b600061288d600f8361309c565b91507f56414120686173206578706972656400000000000000000000000000000000006000830152602082019050919050565b60006128cd60158361309c565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061290d60098361309c565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061294d60148361309c565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b600061298d60198361309c565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129cd60188361309c565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a0d601d8361309c565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a4d602a8361309c565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ab360268361309c565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b19601f8361309c565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b6982826125b7565b9150506020830151612b7e6020860182612b98565b508091505092915050565b612b92816130f5565b82525050565b612ba1816130ff565b82525050565b612bb0816130ff565b82525050565b612bbf8161310f565b82525050565b612bd6612bd18261310f565b61318f565b82525050565b6000612be8828461264a565b915081905092915050565b6000612bff8285612bc5565b600182019150612c0f8284612633565b6020820191508190509392505050565b6000602082019050612c3460008301846125a8565b92915050565b6000602082019050612c4f600083018461258a565b92915050565b6000604082019050612c6a600083018561258a565b612c776020830184612b89565b9392505050565b6000606082019050612c9360008301866125a8565b612ca060208301856125a8565b612cad6040830184612b89565b949350505050565b6000604082019050612cca60008301856125a8565b612cd76020830184612b89565b9392505050565b6000602082019050612cf36000830184612615565b92915050565b6000608082019050612d0e6000830187612624565b612d1b6020830186612bb6565b612d286040830185612624565b612d356060830184612624565b95945050505050565b60006020820190508181036000830152612d58818461267b565b905092915050565b60006020820190508181036000830152612d79816126b4565b9050919050565b60006020820190508181036000830152612d99816126f4565b9050919050565b60006020820190508181036000830152612db981612734565b9050919050565b60006020820190508181036000830152612dd98161279a565b9050919050565b60006020820190508181036000830152612df981612800565b9050919050565b60006020820190508181036000830152612e1981612840565b9050919050565b60006020820190508181036000830152612e3981612880565b9050919050565b60006020820190508181036000830152612e59816128c0565b9050919050565b60006020820190508181036000830152612e7981612900565b9050919050565b60006020820190508181036000830152612e9981612940565b9050919050565b60006020820190508181036000830152612eb981612980565b9050919050565b60006020820190508181036000830152612ed9816129c0565b9050919050565b60006020820190508181036000830152612ef981612a00565b9050919050565b60006020820190508181036000830152612f1981612a40565b9050919050565b60006020820190508181036000830152612f3981612aa6565b9050919050565b60006020820190508181036000830152612f5981612b0c565b9050919050565b60006020820190508181036000830152612f7a8184612b4c565b905092915050565b6000602082019050612f976000830184612ba7565b92915050565b6000604082019050612fb26000830185612ba7565b612fbf6020830184612ba7565b9392505050565b6000604082019050612fdb6000830185612bb6565b612fe86020830184612624565b9392505050565b600060a0820190506130046000830188612bb6565b6130116020830187612bb6565b61301e6040830186612624565b61302b6060830185612b89565b6130386080830184612ba7565b9695505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006130b8826130d5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131278261312e565b9050919050565b600061313982613140565b9050919050565b600061314b826130d5565b9050919050565b60005b83811015613170578082015181840152602081019050613155565b8381111561317f576000848401525b50505050565b6000819050919050565b600061319a826131b2565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b6131c8816130ad565b81146131d357600080fd5b50565b6131df816130bf565b81146131ea57600080fd5b50565b6131f6816130cb565b811461320157600080fd5b50565b61320d816130f5565b811461321857600080fd5b50565b613224816130ff565b811461322f57600080fd5b50565b61323b8161310f565b811461324657600080fd5b5056fea2646970667358221220093e64f2de68a8ba56b15335745c5182b42d2cffc846382a42044fbb6a6793ec64736f6c634300060c0033", + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"struct Wormhole.GuardianSet\",\"name\":\"initial_guardian_set\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wrapped_asset_master\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_guardian_set_expirity\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"oldGuardianIndex\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newGuardianIndex\",\"type\":\"uint32\"}],\"name\":\"LogGuardianSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_chain\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"token_decimals\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"token\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"LogTokensLocked\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"consumedVAAs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"idx\",\"type\":\"uint32\"}],\"name\":\"getGuardianSet\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"keys\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"internalType\":\"struct Wormhole.GuardianSet\",\"name\":\"gs\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_expirity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian_set_index\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"guardian_sets\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"expiration_time\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWrappedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"target_chain\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"}],\"name\":\"lockETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"vaa\",\"type\":\"bytes\"}],\"name\":\"submitVAA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedAssetMaster\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"wrappedAssets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol\":\"Wormhole\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/BytesLib.sol\":{\"keccak256\":\"0x4a28e69afc4c1c1aee48c7b497f9b8452b295ddcf4bbf453d594a1467016d5f2\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://279e22c43f79567e9f7842cfca8ad2329bbbad2eac30413b620796d51f308719\",\"dweb:/ipfs/QmbdRLJYoKJxDbDLeverNMHsNFEcxnohAA713UFLjLm3Jy\"]},\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol\":{\"keccak256\":\"0x1415692227a00f25800adfbfc266790a6fa1cb7603cd7140c82896edac01ecc2\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://41ac673638b9c36e57e0c13d05ccf278e63dda2026ae13bb19fbe4d6ba9a3a00\",\"dweb:/ipfs/QmcS7zasHQJVRVAoZtSHZcwHub2w1FRsAEK88YsPPQrY6U\"]},\"/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/WrappedAsset.sol\":{\"keccak256\":\"0xf7ce817c18d74da0e2b15fed25b3e7dcb79cc41f422f641bb863f9a40d62ffcf\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://6c931162370f9d24a56743a3f769734e2d7d00c9fc7fcceec81c8765b17ab4b6\",\"dweb:/ipfs/QmQfs7Td14iy6fGF56PrGYq7VKUQtYqjhjebQ2Um1E6fUT\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xf204d98eef08edacf5a02a2af1516ea4febdb6aba7a1ae5ac8deb6e568fd3dbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4dea62bffbd180772a6cfe7cb90e3a045c52d6b502bdb2fdff83193da42d8d0\",\"dweb:/ipfs/QmW8qGZ5nngajmv5Aamdrpkeuq7S5YCVaR7rtcqNekKHtK\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3\",\"dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff\",\"dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x7ff0067f2d7df4187eaa1cb4800949b929602c9d9cb20fcaee6922a7613ef2fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78aa63fd7fbb8df2942b6c6e7bd89349507e306edbd5909ee8d9575c31be57e5\",\"dweb:/ipfs/Qmf6z9KWKCJCfEVokgTBhBVq5yHtE6is31N8AV5BHdMkqQ\"]}},\"version\":1}", + "bytecode": "0x60806040526002600160146101000a81548160ff021916908360ff1602179055503480156200002d57600080fd5b50604051620037993803806200379983398181016040528101906200005391906200033e565b600160008190555082600260008063ffffffff1681526020019081526020016000206000820151816000019080519060200190620000939291906200014b565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055509050506000600360006101000a81548163ffffffff021916908363ffffffff16021790555080600360046101000a81548163ffffffff021916908363ffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200047c565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200016c565b5b509050620001d69190620001da565b5090565b5b808211156200021357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620001db565b5090565b600081519050620002288162000448565b92915050565b600082601f8301126200024057600080fd5b8151620002576200025182620003db565b620003ad565b915081818352602084019350602081019050838560208402820111156200027d57600080fd5b60005b83811015620002b1578162000296888262000217565b84526020840193506020830192505060018101905062000280565b5050505092915050565b600060408284031215620002ce57600080fd5b620002da6040620003ad565b9050600082015167ffffffffffffffff811115620002f757600080fd5b62000305848285016200022e565b60008301525060206200031b8482850162000327565b60208301525092915050565b600081519050620003388162000462565b92915050565b6000806000606084860312156200035457600080fd5b600084015167ffffffffffffffff8111156200036f57600080fd5b6200037d86828701620002bb565b9350506020620003908682870162000217565b9250506040620003a38682870162000327565b9150509250925092565b6000604051905081810181811067ffffffffffffffff82111715620003d157600080fd5b8060405250919050565b600067ffffffffffffffff821115620003f357600080fd5b602082029050602081019050919050565b6000620004118262000418565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b620004538162000404565b81146200045f57600080fd5b50565b6200046d8162000438565b81146200047957600080fd5b50565b61330d806200048c6000396000f3fe6080604052600436106100a05760003560e01c806358d62e461161006457806358d62e4614610212578063822d82b31461022e57806399da1d3c14610259578063a31fe40914610284578063b6694c2a146102c1578063f951975a146102fe576100e0565b806313cca1a91461011b5780631a2be4da146101445780633bc0aee61461018157806342b0aefa146101aa5780634db47840146101e7576100e0565b366100e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d790612dbf565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011290612dbf565b60405180910390fd5b34801561012757600080fd5b50610142600480360381019061013d91906123c1565b61033b565b005b34801561015057600080fd5b5061016b60048036038101906101669190612398565b61080c565b6040516101789190612cfd565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612502565b61082c565b005b3480156101b657600080fd5b506101d160048036038101906101cc9190612570565b6110a0565b6040516101de9190612f81565b60405180910390f35b3480156101f357600080fd5b506101fc6110ce565b6040516102099190612f81565b60405180910390f35b61022c600480360381019061022791906124b3565b6110e4565b005b34801561023a57600080fd5b50610243611291565b6040516102509190612f81565b60405180910390f35b34801561026557600080fd5b5061026e6112a7565b60405161027b9190612c3e565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612461565b6112cd565b6040516102b89190612cfd565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612461565b6112ed565b6040516102f59190612c3e565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612570565b611320565b6040516103329190612f5f565b60405180910390f35b60026000541415610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037890612f3f565b60405180910390fd5b600260008190555060008414156103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612e7f565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105a7578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610470929190612c74565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e857600080fd5b505afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105209190612599565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056857600080fd5b505afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061248a565b9050610722565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105e29190612c59565b60206040518083038186803b1580156105fa57600080fd5b505afa15801561060e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190612547565b90506106613330898b73ffffffffffffffffffffffffffffffffffffffff1661140d909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161069c9190612c59565b60206040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190612547565b9050610701828261149690919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab886858b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a657600080fd5b505afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612599565b8a8c8a6040516107f39695949392919061305d565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60026000541415610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990612f3f565b60405180910390fd5b600260008190555060006108d4600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b905060018160ff161461091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390612e1f565b60405180910390fd5b6000610976600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061153e90919063ffffffff16565b905060006109d2600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b60ff16905060008160420260060190506000610a428283898990500389898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612d9f565b60405180910390fd5b610ab46121ac565b600260008663ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b6357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b19575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610bb6575042816020015163ffffffff16115b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612ebf565b60405180910390fd5b8360016003600484600001515181610c0957fe5b0402011115610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490612e5f565b60405180910390fd5b60005b84811015610ec9576000610cb7604283026006018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506000610d18604284026007018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610d79604285026027018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610dda604286026047018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b9050601b8101905085600001518460ff1681518110610df557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e369493929190612d18565b6020604051602081039080840390855afa158015610e58573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612e3f565b60405180910390fd5b505050508080600101915050610c50565b506000610f26600485018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506060610f8e60058601600587018c8c9050038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b905060018260ff16141561100a57600360009054906101000a900463ffffffff1663ffffffff168763ffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390612ddf565b60405180910390fd5b611005816116bc565b611060565b60108260ff1614156110245761101f8161193a565b61105f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690612d7f565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b600360049054906101000a900463ffffffff1681565b6002600054141561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190612f3f565b60405180910390fd5b60026000819055506000341415611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90612e7f565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab884600160149054906101000a900460ff16601288348860405161127c96959493929190612ffc565b60405180910390a36001600081905550505050565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113286121ac565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113d757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161138d575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b611490846323b872dd60e01b85858560405160240161142e93929190612c9d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b50505050565b60006114d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd1565b905092915050565b60006001820183511015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090612dff565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90612dff565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612dff565b60405180910390fd5b606082156000811461160157604051915060208201604052611652565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561163f5780518352602083019250602081019050611622565b50868552601f19601f8301166040525050505b50809150509392505050565b600060208201835110156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90612dff565b60405180910390fd5b60008260208501015190508091505092915050565b60006116d260008361153e90919063ffffffff16565b905060006116ea6004846114e090919063ffffffff16565b905060608160ff1667ffffffffffffffff8111801561170857600080fd5b506040519080825280602002602001820160405280156117375781602001602082028036833780820191505090505b50905060005b8260ff168110156117ba5760006117636014830260050187611d2c90919063ffffffff16565b90508083838151811061177257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061173d565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117fb6121ac565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000190805190602001906118679291906121cc565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff1660405161192a929190612f9c565b60405180910390a1505050505050565b60006119506004836114e090919063ffffffff16565b905060006119686005846114e090919063ffffffff16565b90506000611980603285611d2c90919063ffffffff16565b905060006119986046866114e090919063ffffffff16565b905060006119b0606887611d9990919063ffffffff16565b90508360ff168560ff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612f1f565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990612e9f565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611bbd576000611a8460478861165e90919063ffffffff16565b905060008382604051602001611a9b929190612c12565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b48576000611b3660678b6114e090919063ffffffff16565b9050611b4483878684611df7565b9150505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b83929190612cd4565b600060405180830381600087803b158015611b9d57600080fd5b505af1158015611bb1573d6000803e3d6000fd5b50505050505050611c02565b6000611bd3605388611d2c90919063ffffffff16565b9050611c0084838373ffffffffffffffffffffffffffffffffffffffff16611fa09092919063ffffffff16565b505b505050505050565b6060611c6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120269092919063ffffffff16565b9050600081511115611ccc5780806020019051810190611c8c9190612438565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc290612eff565b60405180910390fd5b5b505050565b6000838311158290611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109190612d5d565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90612dff565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990612dff565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152866037826000f59250508173ffffffffffffffffffffffffffffffffffffffff1663a7a2d3fb8686866040518463ffffffff1660e01b8152600401611ebb93929190612fc5565b600060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b50505050816005600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050949350505050565b6120218363a9059cbb60e01b8484604051602401611fbf929190612cd4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b505050565b6060612035848460008561203e565b90509392505050565b606061204985612161565b612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90612edf565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120b29190612bfb565b60006040518083038185875af1925050503d80600081146120ef576040519150601f19603f3d011682016040523d82523d6000602084013e6120f4565b606091505b50915091508115612109578092505050612159565b60008151111561211c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121509190612d5d565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156121a357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b828054828255906000526020600020908101928215612245579160200282015b828111156122445782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906121ec565b5b5090506122529190612256565b5090565b5b8082111561228d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612257565b5090565b6000813590506122a08161324d565b92915050565b6000815190506122b581613264565b92915050565b6000813590506122ca8161327b565b92915050565b6000815190506122df8161327b565b92915050565b60008083601f8401126122f757600080fd5b8235905067ffffffffffffffff81111561231057600080fd5b60208301915083600182028301111561232857600080fd5b9250929050565b60008135905061233e81613292565b92915050565b60008151905061235381613292565b92915050565b600081359050612368816132a9565b92915050565b60008135905061237d816132c0565b92915050565b600081519050612392816132c0565b92915050565b6000602082840312156123aa57600080fd5b60006123b884828501612291565b91505092915050565b600080600080600060a086880312156123d957600080fd5b60006123e788828901612291565b95505060206123f88882890161232f565b9450506040612409888289016122bb565b935050606061241a8882890161236e565b925050608061242b88828901612359565b9150509295509295909350565b60006020828403121561244a57600080fd5b6000612458848285016122a6565b91505092915050565b60006020828403121561247357600080fd5b6000612481848285016122bb565b91505092915050565b60006020828403121561249c57600080fd5b60006124aa848285016122d0565b91505092915050565b6000806000606084860312156124c857600080fd5b60006124d6868287016122bb565b93505060206124e78682870161236e565b92505060406124f886828701612359565b9150509250925092565b6000806020838503121561251557600080fd5b600083013567ffffffffffffffff81111561252f57600080fd5b61253b858286016122e5565b92509250509250929050565b60006020828403121561255957600080fd5b600061256784828501612344565b91505092915050565b60006020828403121561258257600080fd5b600061259084828501612359565b91505092915050565b6000602082840312156125ab57600080fd5b60006125b984828501612383565b91505092915050565b60006125ce83836125e9565b60208301905092915050565b6125e381613198565b82525050565b6125f281613129565b82525050565b61260181613129565b82525050565b6000612612826130ce565b61261c81856130fc565b9350612627836130be565b8060005b8381101561265857815161263f88826125c2565b975061264a836130ef565b92505060018101905061262b565b5085935050505092915050565b61266e8161313b565b82525050565b61267d81613147565b82525050565b61269461268f82613147565b613213565b82525050565b60006126a5826130d9565b6126af818561310d565b93506126bf8185602086016131e0565b80840191505092915050565b6126d4816131aa565b82525050565b60006126e5826130e4565b6126ef8185613118565b93506126ff8185602086016131e0565b6127088161322f565b840191505092915050565b6000612720601283613118565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b6000612760601883613118565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b60006127a0602c83613118565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b6000612806603983613118565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061286c601283613118565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b60006128ac601883613118565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b60006128ec601583613118565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061292c600983613118565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061296c601483613118565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b60006129ac601983613118565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129ec601883613118565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a2c601d83613118565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a6c602a83613118565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad2602683613118565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b38601f83613118565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b888282612607565b9150506020830151612b9d6020860182612bb7565b508091505092915050565b612bb181613171565b82525050565b612bc08161317b565b82525050565b612bcf8161317b565b82525050565b612bde8161318b565b82525050565b612bf5612bf08261318b565b61321d565b82525050565b6000612c07828461269a565b915081905092915050565b6000612c1e8285612be4565b600182019150612c2e8284612683565b6020820191508190509392505050565b6000602082019050612c5360008301846125f8565b92915050565b6000602082019050612c6e60008301846125da565b92915050565b6000604082019050612c8960008301856125da565b612c966020830184612ba8565b9392505050565b6000606082019050612cb260008301866125f8565b612cbf60208301856125f8565b612ccc6040830184612ba8565b949350505050565b6000604082019050612ce960008301856125f8565b612cf66020830184612ba8565b9392505050565b6000602082019050612d126000830184612665565b92915050565b6000608082019050612d2d6000830187612674565b612d3a6020830186612bd5565b612d476040830185612674565b612d546060830184612674565b95945050505050565b60006020820190508181036000830152612d7781846126da565b905092915050565b60006020820190508181036000830152612d9881612713565b9050919050565b60006020820190508181036000830152612db881612753565b9050919050565b60006020820190508181036000830152612dd881612793565b9050919050565b60006020820190508181036000830152612df8816127f9565b9050919050565b60006020820190508181036000830152612e188161285f565b9050919050565b60006020820190508181036000830152612e388161289f565b9050919050565b60006020820190508181036000830152612e58816128df565b9050919050565b60006020820190508181036000830152612e788161291f565b9050919050565b60006020820190508181036000830152612e988161295f565b9050919050565b60006020820190508181036000830152612eb88161299f565b9050919050565b60006020820190508181036000830152612ed8816129df565b9050919050565b60006020820190508181036000830152612ef881612a1f565b9050919050565b60006020820190508181036000830152612f1881612a5f565b9050919050565b60006020820190508181036000830152612f3881612ac5565b9050919050565b60006020820190508181036000830152612f5881612b2b565b9050919050565b60006020820190508181036000830152612f798184612b6b565b905092915050565b6000602082019050612f966000830184612bc6565b92915050565b6000604082019050612fb16000830185612bc6565b612fbe6020830184612bc6565b9392505050565b6000606082019050612fda6000830186612bd5565b612fe76020830185612674565b612ff46040830184612bd5565b949350505050565b600060c0820190506130116000830189612bd5565b61301e6020830188612bd5565b61302b60408301876126cb565b6130386060830186612674565b6130456080830185612ba8565b61305260a0830184612bc6565b979650505050505050565b600060c0820190506130726000830189612bd5565b61307f6020830188612bd5565b61308c6040830187612bd5565b6130996060830186612674565b6130a66080830185612ba8565b6130b360a0830184612bc6565b979650505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061313482613151565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131a3826131bc565b9050919050565b60006131b58261318b565b9050919050565b60006131c7826131ce565b9050919050565b60006131d982613151565b9050919050565b60005b838110156131fe5780820151818401526020810190506131e3565b8381111561320d576000848401525b50505050565b6000819050919050565b600061322882613240565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b61325681613129565b811461326157600080fd5b50565b61326d8161313b565b811461327857600080fd5b50565b61328481613147565b811461328f57600080fd5b50565b61329b81613171565b81146132a657600080fd5b50565b6132b28161317b565b81146132bd57600080fd5b50565b6132c98161318b565b81146132d457600080fd5b5056fea26469706673582212208f3f419adeb7ca3cd853715b74fc3a8cacdc215c41169446b0565304bd3fa34364736f6c634300060c0033", + "deployedBytecode": "0x6080604052600436106100a05760003560e01c806358d62e461161006457806358d62e4614610212578063822d82b31461022e57806399da1d3c14610259578063a31fe40914610284578063b6694c2a146102c1578063f951975a146102fe576100e0565b806313cca1a91461011b5780631a2be4da146101445780633bc0aee61461018157806342b0aefa146101aa5780634db47840146101e7576100e0565b366100e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d790612dbf565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011290612dbf565b60405180910390fd5b34801561012757600080fd5b50610142600480360381019061013d91906123c1565b61033b565b005b34801561015057600080fd5b5061016b60048036038101906101669190612398565b61080c565b6040516101789190612cfd565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612502565b61082c565b005b3480156101b657600080fd5b506101d160048036038101906101cc9190612570565b6110a0565b6040516101de9190612f81565b60405180910390f35b3480156101f357600080fd5b506101fc6110ce565b6040516102099190612f81565b60405180910390f35b61022c600480360381019061022791906124b3565b6110e4565b005b34801561023a57600080fd5b50610243611291565b6040516102509190612f81565b60405180910390f35b34801561026557600080fd5b5061026e6112a7565b60405161027b9190612c3e565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612461565b6112cd565b6040516102b89190612cfd565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612461565b6112ed565b6040516102f59190612c3e565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612570565b611320565b6040516103329190612f5f565b60405180910390f35b60026000541415610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037890612f3f565b60405180910390fd5b600260008190555060008414156103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612e7f565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105a7578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610470929190612c74565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e857600080fd5b505afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105209190612599565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056857600080fd5b505afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061248a565b9050610722565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105e29190612c59565b60206040518083038186803b1580156105fa57600080fd5b505afa15801561060e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190612547565b90506106613330898b73ffffffffffffffffffffffffffffffffffffffff1661140d909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161069c9190612c59565b60206040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190612547565b9050610701828261149690919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab886858b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a657600080fd5b505afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612599565b8a8c8a6040516107f39695949392919061305d565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60026000541415610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990612f3f565b60405180910390fd5b600260008190555060006108d4600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b905060018160ff161461091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390612e1f565b60405180910390fd5b6000610976600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061153e90919063ffffffff16565b905060006109d2600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b60ff16905060008160420260060190506000610a428283898990500389898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612d9f565b60405180910390fd5b610ab46121ac565b600260008663ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b6357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b19575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610bb6575042816020015163ffffffff16115b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612ebf565b60405180910390fd5b8360016003600484600001515181610c0957fe5b0402011115610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490612e5f565b60405180910390fd5b60005b84811015610ec9576000610cb7604283026006018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506000610d18604284026007018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610d79604285026027018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610dda604286026047018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b9050601b8101905085600001518460ff1681518110610df557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e369493929190612d18565b6020604051602081039080840390855afa158015610e58573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612e3f565b60405180910390fd5b505050508080600101915050610c50565b506000610f26600485018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506060610f8e60058601600587018c8c9050038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b905060018260ff16141561100a57600360009054906101000a900463ffffffff1663ffffffff168763ffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390612ddf565b60405180910390fd5b611005816116bc565b611060565b60108260ff1614156110245761101f8161193a565b61105f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690612d7f565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b600360049054906101000a900463ffffffff1681565b6002600054141561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190612f3f565b60405180910390fd5b60026000819055506000341415611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90612e7f565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab884600160149054906101000a900460ff16601288348860405161127c96959493929190612ffc565b60405180910390a36001600081905550505050565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113286121ac565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113d757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161138d575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b611490846323b872dd60e01b85858560405160240161142e93929190612c9d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b50505050565b60006114d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd1565b905092915050565b60006001820183511015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090612dff565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90612dff565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612dff565b60405180910390fd5b606082156000811461160157604051915060208201604052611652565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561163f5780518352602083019250602081019050611622565b50868552601f19601f8301166040525050505b50809150509392505050565b600060208201835110156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90612dff565b60405180910390fd5b60008260208501015190508091505092915050565b60006116d260008361153e90919063ffffffff16565b905060006116ea6004846114e090919063ffffffff16565b905060608160ff1667ffffffffffffffff8111801561170857600080fd5b506040519080825280602002602001820160405280156117375781602001602082028036833780820191505090505b50905060005b8260ff168110156117ba5760006117636014830260050187611d2c90919063ffffffff16565b90508083838151811061177257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061173d565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117fb6121ac565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000190805190602001906118679291906121cc565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff1660405161192a929190612f9c565b60405180910390a1505050505050565b60006119506004836114e090919063ffffffff16565b905060006119686005846114e090919063ffffffff16565b90506000611980603285611d2c90919063ffffffff16565b905060006119986046866114e090919063ffffffff16565b905060006119b0606887611d9990919063ffffffff16565b90508360ff168560ff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612f1f565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990612e9f565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611bbd576000611a8460478861165e90919063ffffffff16565b905060008382604051602001611a9b929190612c12565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b48576000611b3660678b6114e090919063ffffffff16565b9050611b4483878684611df7565b9150505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b83929190612cd4565b600060405180830381600087803b158015611b9d57600080fd5b505af1158015611bb1573d6000803e3d6000fd5b50505050505050611c02565b6000611bd3605388611d2c90919063ffffffff16565b9050611c0084838373ffffffffffffffffffffffffffffffffffffffff16611fa09092919063ffffffff16565b505b505050505050565b6060611c6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120269092919063ffffffff16565b9050600081511115611ccc5780806020019051810190611c8c9190612438565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc290612eff565b60405180910390fd5b5b505050565b6000838311158290611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109190612d5d565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90612dff565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990612dff565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152866037826000f59250508173ffffffffffffffffffffffffffffffffffffffff1663a7a2d3fb8686866040518463ffffffff1660e01b8152600401611ebb93929190612fc5565b600060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b50505050816005600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050949350505050565b6120218363a9059cbb60e01b8484604051602401611fbf929190612cd4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b505050565b6060612035848460008561203e565b90509392505050565b606061204985612161565b612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90612edf565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120b29190612bfb565b60006040518083038185875af1925050503d80600081146120ef576040519150601f19603f3d011682016040523d82523d6000602084013e6120f4565b606091505b50915091508115612109578092505050612159565b60008151111561211c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121509190612d5d565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156121a357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b828054828255906000526020600020908101928215612245579160200282015b828111156122445782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906121ec565b5b5090506122529190612256565b5090565b5b8082111561228d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612257565b5090565b6000813590506122a08161324d565b92915050565b6000815190506122b581613264565b92915050565b6000813590506122ca8161327b565b92915050565b6000815190506122df8161327b565b92915050565b60008083601f8401126122f757600080fd5b8235905067ffffffffffffffff81111561231057600080fd5b60208301915083600182028301111561232857600080fd5b9250929050565b60008135905061233e81613292565b92915050565b60008151905061235381613292565b92915050565b600081359050612368816132a9565b92915050565b60008135905061237d816132c0565b92915050565b600081519050612392816132c0565b92915050565b6000602082840312156123aa57600080fd5b60006123b884828501612291565b91505092915050565b600080600080600060a086880312156123d957600080fd5b60006123e788828901612291565b95505060206123f88882890161232f565b9450506040612409888289016122bb565b935050606061241a8882890161236e565b925050608061242b88828901612359565b9150509295509295909350565b60006020828403121561244a57600080fd5b6000612458848285016122a6565b91505092915050565b60006020828403121561247357600080fd5b6000612481848285016122bb565b91505092915050565b60006020828403121561249c57600080fd5b60006124aa848285016122d0565b91505092915050565b6000806000606084860312156124c857600080fd5b60006124d6868287016122bb565b93505060206124e78682870161236e565b92505060406124f886828701612359565b9150509250925092565b6000806020838503121561251557600080fd5b600083013567ffffffffffffffff81111561252f57600080fd5b61253b858286016122e5565b92509250509250929050565b60006020828403121561255957600080fd5b600061256784828501612344565b91505092915050565b60006020828403121561258257600080fd5b600061259084828501612359565b91505092915050565b6000602082840312156125ab57600080fd5b60006125b984828501612383565b91505092915050565b60006125ce83836125e9565b60208301905092915050565b6125e381613198565b82525050565b6125f281613129565b82525050565b61260181613129565b82525050565b6000612612826130ce565b61261c81856130fc565b9350612627836130be565b8060005b8381101561265857815161263f88826125c2565b975061264a836130ef565b92505060018101905061262b565b5085935050505092915050565b61266e8161313b565b82525050565b61267d81613147565b82525050565b61269461268f82613147565b613213565b82525050565b60006126a5826130d9565b6126af818561310d565b93506126bf8185602086016131e0565b80840191505092915050565b6126d4816131aa565b82525050565b60006126e5826130e4565b6126ef8185613118565b93506126ff8185602086016131e0565b6127088161322f565b840191505092915050565b6000612720601283613118565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b6000612760601883613118565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b60006127a0602c83613118565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b6000612806603983613118565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061286c601283613118565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b60006128ac601883613118565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b60006128ec601583613118565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061292c600983613118565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061296c601483613118565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b60006129ac601983613118565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129ec601883613118565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a2c601d83613118565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a6c602a83613118565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad2602683613118565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b38601f83613118565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b888282612607565b9150506020830151612b9d6020860182612bb7565b508091505092915050565b612bb181613171565b82525050565b612bc08161317b565b82525050565b612bcf8161317b565b82525050565b612bde8161318b565b82525050565b612bf5612bf08261318b565b61321d565b82525050565b6000612c07828461269a565b915081905092915050565b6000612c1e8285612be4565b600182019150612c2e8284612683565b6020820191508190509392505050565b6000602082019050612c5360008301846125f8565b92915050565b6000602082019050612c6e60008301846125da565b92915050565b6000604082019050612c8960008301856125da565b612c966020830184612ba8565b9392505050565b6000606082019050612cb260008301866125f8565b612cbf60208301856125f8565b612ccc6040830184612ba8565b949350505050565b6000604082019050612ce960008301856125f8565b612cf66020830184612ba8565b9392505050565b6000602082019050612d126000830184612665565b92915050565b6000608082019050612d2d6000830187612674565b612d3a6020830186612bd5565b612d476040830185612674565b612d546060830184612674565b95945050505050565b60006020820190508181036000830152612d7781846126da565b905092915050565b60006020820190508181036000830152612d9881612713565b9050919050565b60006020820190508181036000830152612db881612753565b9050919050565b60006020820190508181036000830152612dd881612793565b9050919050565b60006020820190508181036000830152612df8816127f9565b9050919050565b60006020820190508181036000830152612e188161285f565b9050919050565b60006020820190508181036000830152612e388161289f565b9050919050565b60006020820190508181036000830152612e58816128df565b9050919050565b60006020820190508181036000830152612e788161291f565b9050919050565b60006020820190508181036000830152612e988161295f565b9050919050565b60006020820190508181036000830152612eb88161299f565b9050919050565b60006020820190508181036000830152612ed8816129df565b9050919050565b60006020820190508181036000830152612ef881612a1f565b9050919050565b60006020820190508181036000830152612f1881612a5f565b9050919050565b60006020820190508181036000830152612f3881612ac5565b9050919050565b60006020820190508181036000830152612f5881612b2b565b9050919050565b60006020820190508181036000830152612f798184612b6b565b905092915050565b6000602082019050612f966000830184612bc6565b92915050565b6000604082019050612fb16000830185612bc6565b612fbe6020830184612bc6565b9392505050565b6000606082019050612fda6000830186612bd5565b612fe76020830185612674565b612ff46040830184612bd5565b949350505050565b600060c0820190506130116000830189612bd5565b61301e6020830188612bd5565b61302b60408301876126cb565b6130386060830186612674565b6130456080830185612ba8565b61305260a0830184612bc6565b979650505050505050565b600060c0820190506130726000830189612bd5565b61307f6020830188612bd5565b61308c6040830187612bd5565b6130996060830186612674565b6130a66080830185612ba8565b6130b360a0830184612bc6565b979650505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061313482613151565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131a3826131bc565b9050919050565b60006131b58261318b565b9050919050565b60006131c7826131ce565b9050919050565b60006131d982613151565b9050919050565b60005b838110156131fe5780820151818401526020810190506131e3565b8381111561320d576000848401525b50505050565b6000819050919050565b600061322882613240565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b61325681613129565b811461326157600080fd5b50565b61326d8161313b565b811461327857600080fd5b50565b61328481613147565b811461328f57600080fd5b50565b61329b81613171565b81146132a657600080fd5b50565b6132b28161317b565b81146132bd57600080fd5b50565b6132c98161318b565b81146132d457600080fd5b5056fea26469706673582212208f3f419adeb7ca3cd853715b74fc3a8cacdc215c41169446b0565304bd3fa34364736f6c634300060c0033", "immutableReferences": {}, - "sourceMap": "446:8753:1:-:0;;;714:1;697:18;;;;;;;;;;;;;;;;;;;;1770:327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1628:1:8;1743:7;:22;;;;1909:20:1;1890:13;:16;1904:1;1890:16;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2003:1;1982:18;;:22;;;;;;;;;;;;;;;;;;2027:11;2014:10;;:24;;;;;;;;;;;;;;;;;;2070:20;2049:18;;:41;;;;;;;;;;;;;;;;;;1770:327;;;446:8753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:134:-1:-;;89:6;83:13;74:22;;101:33;128:5;101:33;:::i;:::-;68:71;;;;:::o;164:722::-;;292:3;285:4;277:6;273:17;269:27;259:2;;310:1;307;300:12;259:2;340:6;334:13;362:80;377:64;434:6;377:64;:::i;:::-;362:80;:::i;:::-;353:89;;459:5;484:6;477:5;470:21;514:4;506:6;502:17;492:27;;536:4;531:3;527:14;520:21;;589:6;636:3;628:4;620:6;616:17;611:3;607:27;604:36;601:2;;;653:1;650;643:12;601:2;678:1;663:217;688:6;685:1;682:13;663:217;;;746:3;768:48;812:3;800:10;768:48;:::i;:::-;763:3;756:61;840:4;835:3;831:14;824:21;;868:4;863:3;859:14;852:21;;720:160;710:1;707;703:9;698:14;;663:217;;;667:14;252:634;;;;;;;:::o;928:617::-;;1056:4;1044:9;1039:3;1035:19;1031:30;1028:2;;;1074:1;1071;1064:12;1028:2;1092:20;1107:4;1092:20;:::i;:::-;1083:29;;1183:1;1172:9;1168:17;1162:24;1206:18;1198:6;1195:30;1192:2;;;1238:1;1235;1228:12;1192:2;1273:85;1354:3;1345:6;1334:9;1330:22;1273:85;:::i;:::-;1266:4;1259:5;1255:16;1248:111;1122:248;1431:2;1464:59;1519:3;1510:6;1499:9;1495:22;1464:59;:::i;:::-;1457:4;1450:5;1446:16;1439:85;1380:155;1022:523;;;;:::o;1552:132::-;;1635:6;1629:13;1620:22;;1647:32;1673:5;1647:32;:::i;:::-;1614:70;;;;:::o;1691:668::-;;;;1867:2;1855:9;1846:7;1842:23;1838:32;1835:2;;;1883:1;1880;1873:12;1835:2;1939:1;1928:9;1924:17;1918:24;1962:18;1954:6;1951:30;1948:2;;;1994:1;1991;1984:12;1948:2;2014:92;2098:7;2089:6;2078:9;2074:22;2014:92;:::i;:::-;2004:102;;1897:215;2143:2;2161:64;2217:7;2208:6;2197:9;2193:22;2161:64;:::i;:::-;2151:74;;2122:109;2262:2;2280:63;2335:7;2326:6;2315:9;2311:22;2280:63;:::i;:::-;2270:73;;2241:108;1829:530;;;;;:::o;2366:256::-;;2428:2;2422:9;2412:19;;2466:4;2458:6;2454:17;2565:6;2553:10;2550:22;2529:18;2517:10;2514:34;2511:62;2508:2;;;2586:1;2583;2576:12;2508:2;2606:10;2602:2;2595:22;2406:216;;;;:::o;2629:304::-;;2788:18;2780:6;2777:30;2774:2;;;2820:1;2817;2810:12;2774:2;2855:4;2847:6;2843:17;2835:25;;2918:4;2912;2908:15;2900:23;;2711:222;;;:::o;2940:91::-;;3002:24;3020:5;3002:24;:::i;:::-;2991:35;;2985:46;;;:::o;3038:121::-;;3111:42;3104:5;3100:54;3089:65;;3083:76;;;:::o;3166:88::-;;3238:10;3231:5;3227:22;3216:33;;3210:44;;;:::o;3261:117::-;3330:24;3348:5;3330:24;:::i;:::-;3323:5;3320:35;3310:2;;3369:1;3366;3359:12;3310:2;3304:74;:::o;3385:115::-;3453:23;3470:5;3453:23;:::i;:::-;3446:5;3443:34;3433:2;;3491:1;3488;3481:12;3433:2;3427:73;:::o;446:8753:1:-;;;;;;;", - "deployedSourceMap": "446:8753:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9141:54;;;;;;;;;;:::i;:::-;;;;;;;;446:8753;9056:54;;;;;;;;;;:::i;:::-;;;;;;;;7356:1204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2231:1993;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1319:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8566:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1501:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1411:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;629:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1663:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2103:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7356:1204;1671:1:8;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;7554:1:1::1;7544:6;:11;;7536:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;7591:17;7611:8;;;;;;;;;;;7591:28;;7629:21;7664:14;:21;7679:5;7664:21;;;;;;;;;;;;;;;;;;;;;;;;;7660:765;;;7714:5;7701:24;;;7726:10;7738:6;7701:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7786:5;7773:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7759:46;;7848:5;7835:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7819:50;;7660:765;;;7900:21;7931:5;7924:23;;;7956:4;7924:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7900:62;;7976:65;8007:10;8027:4;8034:6;7983:5;7976:30;;;;:65;;;;;;:::i;:::-;8055:20;8085:5;8078:23;;;8110:4;8078:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8055:61;;8330:31;8347:13;8330:12;:16;;:31;;;;:::i;:::-;8321:40;;8407:5;8399:14;;8391:23;;8375:39;;7660:765;;;8514:10;8506:19;;8498:28;;8483:13;8440:113;8456:12;8470:11;8528:9;8539:6;8547:5;8440:113;;;;;;;;;;:::i;:::-;;;;;;;;2419:1:8;;1628::::0;2563:7;:22;;;;7356:1204:1;;;;;:::o;1717:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2231:1993::-;1671:1:8;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;2314:13:1::1;2330:14;2342:1;2330:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;;;:::i;:::-;2314:30;;2373:1;2362:7;:12;;;2354:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2460:29;2492:15;2505:1;2492:3;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;:::i;:::-;2460:47;;2518:19;2540:14;2552:1;2540:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;;;:::i;:::-;2518:36;;;;2564:11;2587;2582:2;:16;2578:1;:20;2564:34;;2643:16;2662:20;2675:6;2662:3;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;2643:39;;2772:15;2759:10;;;;;;;;;;;2747:9;:22;:40;;;2739:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2843:12;2868:38;2878:6;2899;2886:3;;:10;;:19;2868:3;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;:::i;:::-;2858:49;;;;;;2843:64;;2926:12;:18;2939:4;2926:18;;;;;;;;;;;;;;;;;;;;;2925:19;2917:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2984:31;;:::i;:::-;3018:13;:37;3032:22;3018:37;;;;;;;;;;;;;;;2984:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;3105:1;3073:12;:28;;;:33;;;:83;;;;3141:15;3110:12;:28;;;:46;;;3073:83;3065:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;3243:11;3238:1;3234;3230;3203:12;:17;;;:24;:28;:32;;;;;;:36;:51;;3195:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3284:6;3279:373;3300:11;3296:1;:15;3279:373;;;3332:11;3346:23;3366:2;3362:1;:6;3358:1;:10;3346:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;3332:37;;3383:9;3395:25;3417:2;3413:1;:6;3409:1;:10;3395:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;3383:37;;3434:9;3446:26;3469:2;3465:1;:6;3460:2;:11;3446:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;3434:38;;3486:7;3496:24;3517:2;3513:1;:6;3508:2;:11;3496:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;3486:34;;3539:2;3534:7;;;;3591:12;:17;;;3609:5;3591:24;;;;;;;;;;;;;;;;3563:52;;:24;3573:4;3579:1;3582;3585;3563:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;:52;;;3555:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;3279:373;;;;3313:3;;;;;;;3279:373;;;;3662:12;3677:23;3698:1;3689:6;:10;3677:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;3662:38;;3710:20;3733:48;3752:1;3743:6;:10;3778:1;3769:6;:10;3755:3;;:10;;:25;3733:3;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;:::i;:::-;3710:71;;3829:4;3819:6;:14;;;3815:332;;;3883:18;;;;;;;;;;;3857:44;;:22;:44;;;3849:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;3977:29;3998:7;3977:20;:29::i;:::-;3815:332;;;4037:4;4027:6;:14;;;4023:124;;;4057:20;4069:7;4057:11;:20::i;:::-;4023:124;;;4108:28;;;;;;;;;;:::i;:::-;;;;;;;;4023:124;3815:332;4213:4;4192:12;:18;4205:4;4192:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2419:1:8;;;;;;;;;1628::::0;2563:7;:22;;;;2231:1993:1;;:::o;1319:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8566:458::-;1671:1:8;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;8725:1:1::1;8712:9;:14;;8704:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;798:42;8795:25;;;8829:9;8795:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;8975:10;8967:19;;8959:28;;798:42;8936:20;;8928:29;;8888:129;8904:12;8918:8;;;;;;;;;;;8989:9;9000;9011:5;8888:129;;;;;;;;;;:::i;:::-;;;;;;;;1628:1:8::0;2563:7;:22;;;;8566:458:1;;;:::o;1501:24::-;;;;;;;;;;;;;:::o;1411:32::-;;;;;;;;;;;;;:::o;629:33::-;;;;;;;;;;;;;:::o;1663:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2103:122::-;2160:21;;:::i;:::-;2200:13;:18;2214:3;2200:18;;;;;;;;;;;;;;;2193:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2103:122;;;:::o;877:203:6:-;977:96;997:5;1027:27;;;1056:4;1062:2;1066:5;1004:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;977:19;:96::i;:::-;877:203;;;;:::o;1321:134:4:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;11710:302:0:-;11787:5;11839:1;11830:6;:10;11812:6;:13;:29;;11804:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11874:14;11962:6;11956:3;11948:6;11944:16;11940:29;11934:36;11922:48;;11997:8;11990:15;;;11710:302;;;;:::o;12329:305::-;12407:6;12460:1;12451:6;:10;12433:6;:13;:29;;12425:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12495:15;12584:6;12578:3;12570:6;12566:16;12562:29;12556:36;12544:48;;12619:8;12612:15;;;12329:305;;;;:::o;8865:2480::-;8999:12;9062:7;9053:6;:16;9035:6;:13;:35;;9027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;9104:22;9174:7;9167:15;9200:1;9195:1895;;;;11231:4;11225:11;11212:24;;11282:4;11271:9;11267:20;11261:4;11254:34;9160:2142;;9195:1895;9369:4;9363:11;9350:24;;9996:2;9987:7;9983:16;10362:9;10355:17;10349:4;10345:28;10333:9;10322;10318:25;10314:60;10410:7;10406:2;10402:16;10654:6;10640:9;10633:17;10627:4;10623:28;10611:9;10603:6;10599:22;10595:57;10591:70;10436:417;10687:3;10683:2;10680:11;10436:417;;;10831:2;10825:9;10821:2;10814:21;10728:4;10724:2;10720:13;10714:19;;10768:4;10764:2;10760:13;10754:19;;10436:417;;;10440:239;10889:7;10878:9;10871:26;11071:2;11067:7;11062:2;11058;11054:11;11050:25;11044:4;11037:39;9202:1888;;;9160:2142;;11329:9;11322:16;;;8865:2480;;;;;:::o;13895:319::-;13974:7;14028:2;14019:6;:11;14001:6;:13;:30;;13993:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14064:19;14161:6;14154:4;14146:6;14142:17;14138:30;14132:37;14117:52;;14196:11;14189:18;;;13895:319;;;;:::o;4230:801:1:-;4297:29;4329:16;4343:1;4329:4;:13;;:16;;;;:::i;:::-;4297:48;;4355:9;4367:15;4380:1;4367:4;:12;;:15;;;;:::i;:::-;4355:27;;4393:30;4440:3;4426:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4393:51;;4459:6;4454:134;4475:3;4471:7;;:1;:7;4454:134;;;4499:12;4514:26;4537:2;4533:1;:6;4529:1;:10;4514:4;:14;;:26;;;;:::i;:::-;4499:41;;4573:4;4554:13;4568:1;4554:16;;;;;;;;;;;;;:23;;;;;;;;;;;4454:134;4480:3;;;;;;;4454:134;;;;4598:29;4630:18;;;;;;;;;;;4598:50;;4679:22;4658:18;;:43;;;;;;;;;;;;;;;;;;4712:35;;:::i;:::-;4750:29;;;;;;;;4762:13;4750:29;;;;4777:1;4750:29;;;;;4712:67;;4825:16;4789:13;:33;4803:18;;;;;;;;;;;4789:33;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4933:10;;;;;;;;;;;4914:15;4907:36;4851:13;:37;4865:22;4851:37;;;;;;;;;;;;;;;:53;;;:92;;;;;;;;;;;;;;;;;;4959:65;4981:22;5005:18;;;;;;;;;;;4959:65;;;;;;;:::i;:::-;;;;;;;;4230:801;;;;;;:::o;5037:1373::-;5138:18;5159:15;5172:1;5159:4;:12;;:15;;;;:::i;:::-;5138:36;;5185:18;5206:15;5219:1;5206:4;:12;;:15;;;;:::i;:::-;5185:36;;5340:22;5365:23;5380:7;5365:4;:14;;:23;;;;:::i;:::-;5340:48;;5399:17;5419:16;5432:2;5419:4;:12;;:16;;;;:::i;:::-;5399:36;;5499:14;5516:19;5531:3;5516:4;:14;;:19;;;;:::i;:::-;5499:36;;5570:12;5554:28;;:12;:28;;;;5546:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5659:8;;;;;;;;;;;5643:24;;:12;:24;;;5635:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5727:8;;;;;;;;;;;5712:23;;:11;:23;;;5708:696;;5751:21;5775:18;5790:2;5775:4;:14;;:18;;;;:::i;:::-;5751:42;;5807:16;5853:11;5866:13;5836:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5826:55;;;;;;5807:74;;5973:21;5997:13;:23;6011:8;5997:23;;;;;;;;;;;;;;;;;;;;;5973:47;;6063:1;6038:27;;:13;:27;;;6034:138;;;6101:56;6120:8;6130:11;6143:13;6101:18;:56::i;:::-;6085:72;;6034:138;6199:13;6186:32;;;6219:14;6235:6;6186:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5708:696;;;;;;6273:21;6297:23;6312:7;6297:4;:14;;:23;;;;:::i;:::-;6273:47;;6335:58;6370:14;6386:6;6342:13;6335:34;;;;:58;;;;;:::i;:::-;5708:696;;5037:1373;;;;;;:::o;2959:751:6:-;3378:23;3404:69;3432:4;3404:69;;;;;;;;;;;;;;;;;3412:5;3404:27;;;;:69;;;;;:::i;:::-;3378:95;;3507:1;3487:10;:17;:21;3483:221;;;3627:10;3616:30;;;;;;;;;;;;:::i;:::-;3608:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3483:221;2959:751;;;:::o;1746:187:4:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;11351:353:0:-;11430:7;11484:2;11475:6;:11;11457:6;:13;:30;;11449:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;11520:19;11631:27;11621:6;11614:4;11606:6;11602:17;11598:30;11592:37;11588:71;11573:86;;11686:11;11679:18;;;11351:353;;;;:::o;13579:310::-;13658:7;13712:2;13703:6;:11;13685:6;:13;:30;;13677:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;13748:16;13839:6;13832:4;13824:6;13820:17;13816:30;13810:37;13798:49;;13874:8;13867:15;;;13579:310;;;;:::o;6416:906:1:-;6517:13;6709:19;6739:18;;;;;;;;;;;6731:27;;6709:49;;6810:4;6804:11;6842:66;6835:5;6828:81;6947:11;6940:4;6933:5;6929:16;6922:37;6997:66;6990:4;6983:5;6979:16;6972:92;7103:4;7096:5;7093:1;7086:22;7077:31;;6777:341;7169:5;7156:30;;;7187:11;7200:13;7156:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7272:5;7250:13;:19;7264:4;7250:19;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;7311:4;7287:14;:21;7302:5;7287:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6416:906;;;;;;:::o;696:175:6:-;778:86;798:5;828:23;;;853:2;857:5;805:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;778:19;:86::i;:::-;696:175;;;:::o;3770:194:7:-;3873:12;3904:53;3927:6;3935:4;3941:1;3944:12;3904:22;:53::i;:::-;3897:60;;3770:194;;;;;:::o;5117:958::-;5247:12;5279:18;5290:6;5279:10;:18::i;:::-;5271:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5402:12;5416:23;5443:6;:11;;5463:8;5474:4;5443:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:78;;;;5493:7;5489:580;;;5523:10;5516:17;;;;;;5489:580;5654:1;5634:10;:17;:21;5630:429;;;5892:10;5886:17;5952:15;5939:10;5935:2;5931:19;5924:44;5841:145;6031:12;6024:20;;;;;;;;;;;:::i;:::-;;;;;;;;5117:958;;;;;;;:::o;718:610::-;778:4;1036:16;1062:19;1084:66;1062:88;;;;1251:7;1239:20;1227:32;;1290:11;1278:8;:23;;:42;;;;;1317:3;1305:15;;:8;:15;;1278:42;1270:51;;;;718:610;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:128::-;;223:6;217:13;208:22;;235:30;259:5;235:30;:::i;:::-;202:68;;;;:::o;277:130::-;;357:6;344:20;335:29;;369:33;396:5;369:33;:::i;:::-;329:78;;;;:::o;414:134::-;;498:6;492:13;483:22;;510:33;537:5;510:33;:::i;:::-;477:71;;;;:::o;569:336::-;;;683:3;676:4;668:6;664:17;660:27;650:2;;701:1;698;691:12;650:2;734:6;721:20;711:30;;761:18;753:6;750:30;747:2;;;793:1;790;783:12;747:2;827:4;819:6;815:17;803:29;;878:3;870:4;862:6;858:17;848:8;844:32;841:41;838:2;;;895:1;892;885:12;838:2;643:262;;;;;:::o;913:130::-;;993:6;980:20;971:29;;1005:33;1032:5;1005:33;:::i;:::-;965:78;;;;:::o;1050:134::-;;1134:6;1128:13;1119:22;;1146:33;1173:5;1146:33;:::i;:::-;1113:71;;;;:::o;1191:128::-;;1270:6;1257:20;1248:29;;1282:32;1308:5;1282:32;:::i;:::-;1242:77;;;;:::o;1326:126::-;;1404:6;1391:20;1382:29;;1416:31;1441:5;1416:31;:::i;:::-;1376:76;;;;:::o;1459:130::-;;1541:6;1535:13;1526:22;;1553:31;1578:5;1553:31;:::i;:::-;1520:69;;;;:::o;1596:241::-;;1700:2;1688:9;1679:7;1675:23;1671:32;1668:2;;;1716:1;1713;1706:12;1668:2;1751:1;1768:53;1813:7;1804:6;1793:9;1789:22;1768:53;:::i;:::-;1758:63;;1730:97;1662:175;;;;:::o;1844:737::-;;;;;;2013:3;2001:9;1992:7;1988:23;1984:33;1981:2;;;2030:1;2027;2020:12;1981:2;2065:1;2082:53;2127:7;2118:6;2107:9;2103:22;2082:53;:::i;:::-;2072:63;;2044:97;2172:2;2190:53;2235:7;2226:6;2215:9;2211:22;2190:53;:::i;:::-;2180:63;;2151:98;2280:2;2298:53;2343:7;2334:6;2323:9;2319:22;2298:53;:::i;:::-;2288:63;;2259:98;2388:2;2406:51;2449:7;2440:6;2429:9;2425:22;2406:51;:::i;:::-;2396:61;;2367:96;2494:3;2513:52;2557:7;2548:6;2537:9;2533:22;2513:52;:::i;:::-;2503:62;;2473:98;1975:606;;;;;;;;:::o;2588:257::-;;2700:2;2688:9;2679:7;2675:23;2671:32;2668:2;;;2716:1;2713;2706:12;2668:2;2751:1;2768:61;2821:7;2812:6;2801:9;2797:22;2768:61;:::i;:::-;2758:71;;2730:105;2662:183;;;;:::o;2852:241::-;;2956:2;2944:9;2935:7;2931:23;2927:32;2924:2;;;2972:1;2969;2962:12;2924:2;3007:1;3024:53;3069:7;3060:6;3049:9;3045:22;3024:53;:::i;:::-;3014:63;;2986:97;2918:175;;;;:::o;3100:263::-;;3215:2;3203:9;3194:7;3190:23;3186:32;3183:2;;;3231:1;3228;3221:12;3183:2;3266:1;3283:64;3339:7;3330:6;3319:9;3315:22;3283:64;:::i;:::-;3273:74;;3245:108;3177:186;;;;:::o;3370:485::-;;;;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3521:1;3518;3511:12;3473:2;3556:1;3573:53;3618:7;3609:6;3598:9;3594:22;3573:53;:::i;:::-;3563:63;;3535:97;3663:2;3681:51;3724:7;3715:6;3704:9;3700:22;3681:51;:::i;:::-;3671:61;;3642:96;3769:2;3787:52;3831:7;3822:6;3811:9;3807:22;3787:52;:::i;:::-;3777:62;;3748:97;3467:388;;;;;:::o;3862:365::-;;;3985:2;3973:9;3964:7;3960:23;3956:32;3953:2;;;4001:1;3998;3991:12;3953:2;4064:1;4053:9;4049:17;4036:31;4087:18;4079:6;4076:30;4073:2;;;4119:1;4116;4109:12;4073:2;4147:64;4203:7;4194:6;4183:9;4179:22;4147:64;:::i;:::-;4129:82;;;;4015:202;3947:280;;;;;:::o;4234:263::-;;4349:2;4337:9;4328:7;4324:23;4320:32;4317:2;;;4365:1;4362;4355:12;4317:2;4400:1;4417:64;4473:7;4464:6;4453:9;4449:22;4417:64;:::i;:::-;4407:74;;4379:108;4311:186;;;;:::o;4504:239::-;;4607:2;4595:9;4586:7;4582:23;4578:32;4575:2;;;4623:1;4620;4613:12;4575:2;4658:1;4675:52;4719:7;4710:6;4699:9;4695:22;4675:52;:::i;:::-;4665:62;;4637:96;4569:174;;;;:::o;4750:259::-;;4863:2;4851:9;4842:7;4838:23;4834:32;4831:2;;;4879:1;4876;4869:12;4831:2;4914:1;4931:62;4985:7;4976:6;4965:9;4961:22;4931:62;:::i;:::-;4921:72;;4893:106;4825:184;;;;:::o;5017:173::-;;5104:46;5146:3;5138:6;5104:46;:::i;:::-;5179:4;5174:3;5170:14;5156:28;;5097:93;;;;:::o;5198:142::-;5289:45;5328:5;5289:45;:::i;:::-;5284:3;5277:58;5271:69;;:::o;5347:103::-;5420:24;5438:5;5420:24;:::i;:::-;5415:3;5408:37;5402:48;;:::o;5457:113::-;5540:24;5558:5;5540:24;:::i;:::-;5535:3;5528:37;5522:48;;:::o;5608:670::-;;5743:54;5791:5;5743:54;:::i;:::-;5810:76;5879:6;5874:3;5810:76;:::i;:::-;5803:83;;5907:56;5957:5;5907:56;:::i;:::-;5983:7;6011:1;5996:260;6021:6;6018:1;6015:13;5996:260;;;6088:6;6082:13;6109:63;6168:3;6153:13;6109:63;:::i;:::-;6102:70;;6189:60;6242:6;6189:60;:::i;:::-;6179:70;;6053:203;6043:1;6040;6036:9;6031:14;;5996:260;;;6000:14;6269:3;6262:10;;5722:556;;;;;;;:::o;6286:104::-;6363:21;6378:5;6363:21;:::i;:::-;6358:3;6351:34;6345:45;;:::o;6397:113::-;6480:24;6498:5;6480:24;:::i;:::-;6475:3;6468:37;6462:48;;:::o;6517:152::-;6618:45;6638:24;6656:5;6638:24;:::i;:::-;6618:45;:::i;:::-;6613:3;6606:58;6600:69;;:::o;6676:356::-;;6804:38;6836:5;6804:38;:::i;:::-;6854:88;6935:6;6930:3;6854:88;:::i;:::-;6847:95;;6947:52;6992:6;6987:3;6980:4;6973:5;6969:16;6947:52;:::i;:::-;7020:6;7015:3;7011:16;7004:23;;6784:248;;;;;:::o;7039:347::-;;7151:39;7184:5;7151:39;:::i;:::-;7202:71;7266:6;7261:3;7202:71;:::i;:::-;7195:78;;7278:52;7323:6;7318:3;7311:4;7304:5;7300:16;7278:52;:::i;:::-;7351:29;7373:6;7351:29;:::i;:::-;7346:3;7342:39;7335:46;;7131:255;;;;;:::o;7394:318::-;;7554:67;7618:2;7613:3;7554:67;:::i;:::-;7547:74;;7654:20;7650:1;7645:3;7641:11;7634:41;7703:2;7698:3;7694:12;7687:19;;7540:172;;;:::o;7721:324::-;;7881:67;7945:2;7940:3;7881:67;:::i;:::-;7874:74;;7981:26;7977:1;7972:3;7968:11;7961:47;8036:2;8031:3;8027:12;8020:19;;7867:178;;;:::o;8054:381::-;;8214:67;8278:2;8273:3;8214:67;:::i;:::-;8207:74;;8314:34;8310:1;8305:3;8301:11;8294:55;8383:14;8378:2;8373:3;8369:12;8362:36;8426:2;8421:3;8417:12;8410:19;;8200:235;;;:::o;8444:394::-;;8604:67;8668:2;8663:3;8604:67;:::i;:::-;8597:74;;8704:34;8700:1;8695:3;8691:11;8684:55;8773:27;8768:2;8763:3;8759:12;8752:49;8829:2;8824:3;8820:12;8813:19;;8590:248;;;:::o;8847:318::-;;9007:67;9071:2;9066:3;9007:67;:::i;:::-;9000:74;;9107:20;9103:1;9098:3;9094:11;9087:41;9156:2;9151:3;9147:12;9140:19;;8993:172;;;:::o;9174:324::-;;9334:67;9398:2;9393:3;9334:67;:::i;:::-;9327:74;;9434:26;9430:1;9425:3;9421:11;9414:47;9489:2;9484:3;9480:12;9473:19;;9320:178;;;:::o;9507:315::-;;9667:67;9731:2;9726:3;9667:67;:::i;:::-;9660:74;;9767:17;9763:1;9758:3;9754:11;9747:38;9813:2;9808:3;9804:12;9797:19;;9653:169;;;:::o;9831:321::-;;9991:67;10055:2;10050:3;9991:67;:::i;:::-;9984:74;;10091:23;10087:1;10082:3;10078:11;10071:44;10143:2;10138:3;10134:12;10127:19;;9977:175;;;:::o;10161:308::-;;10321:66;10385:1;10380:3;10321:66;:::i;:::-;10314:73;;10420:11;10416:1;10411:3;10407:11;10400:32;10460:2;10455:3;10451:12;10444:19;;10307:162;;;:::o;10478:320::-;;10638:67;10702:2;10697:3;10638:67;:::i;:::-;10631:74;;10738:22;10734:1;10729:3;10725:11;10718:43;10789:2;10784:3;10780:12;10773:19;;10624:174;;;:::o;10807:325::-;;10967:67;11031:2;11026:3;10967:67;:::i;:::-;10960:74;;11067:27;11063:1;11058:3;11054:11;11047:48;11123:2;11118:3;11114:12;11107:19;;10953:179;;;:::o;11141:324::-;;11301:67;11365:2;11360:3;11301:67;:::i;:::-;11294:74;;11401:26;11397:1;11392:3;11388:11;11381:47;11456:2;11451:3;11447:12;11440:19;;11287:178;;;:::o;11474:329::-;;11634:67;11698:2;11693:3;11634:67;:::i;:::-;11627:74;;11734:31;11730:1;11725:3;11721:11;11714:52;11794:2;11789:3;11785:12;11778:19;;11620:183;;;:::o;11812:379::-;;11972:67;12036:2;12031:3;11972:67;:::i;:::-;11965:74;;12072:34;12068:1;12063:3;12059:11;12052:55;12141:12;12136:2;12131:3;12127:12;12120:34;12182:2;12177:3;12173:12;12166:19;;11958:233;;;:::o;12200:375::-;;12360:67;12424:2;12419:3;12360:67;:::i;:::-;12353:74;;12460:34;12456:1;12451:3;12447:11;12440:55;12529:8;12524:2;12519:3;12515:12;12508:30;12566:2;12561:3;12557:12;12550:19;;12346:229;;;:::o;12584:331::-;;12744:67;12808:2;12803:3;12744:67;:::i;:::-;12737:74;;12844:33;12840:1;12835:3;12831:11;12824:54;12906:2;12901:3;12897:12;12890:19;;12730:185;;;:::o;12988:616::-;;13145:4;13140:3;13136:14;13228:4;13221:5;13217:16;13211:23;13280:3;13274:4;13270:14;13263:4;13258:3;13254:14;13247:38;13300:103;13398:4;13384:12;13300:103;:::i;:::-;13292:111;;13165:250;13499:4;13492:5;13488:16;13482:23;13511:61;13566:4;13561:3;13557:14;13543:12;13511:61;:::i;:::-;13425:153;13595:4;13588:11;;13118:486;;;;;:::o;13611:113::-;13694:24;13712:5;13694:24;:::i;:::-;13689:3;13682:37;13676:48;;:::o;13731:100::-;13802:23;13819:5;13802:23;:::i;:::-;13797:3;13790:36;13784:47;;:::o;13838:110::-;13919:23;13936:5;13919:23;:::i;:::-;13914:3;13907:36;13901:47;;:::o;13955:107::-;14034:22;14050:5;14034:22;:::i;:::-;14029:3;14022:35;14016:46;;:::o;14069:144::-;14166:41;14184:22;14200:5;14184:22;:::i;:::-;14166:41;:::i;:::-;14161:3;14154:54;14148:65;;:::o;14220:271::-;;14373:93;14462:3;14453:6;14373:93;:::i;:::-;14366:100;;14483:3;14476:10;;14354:137;;;;:::o;14498:383::-;;14650:71;14717:3;14708:6;14650:71;:::i;:::-;14743:1;14738:3;14734:11;14727:18;;14756:75;14827:3;14818:6;14756:75;:::i;:::-;14853:2;14848:3;14844:12;14837:19;;14873:3;14866:10;;14638:243;;;;;:::o;14888:222::-;;15015:2;15004:9;15000:18;14992:26;;15029:71;15097:1;15086:9;15082:17;15073:6;15029:71;:::i;:::-;14986:124;;;;:::o;15117:238::-;;15252:2;15241:9;15237:18;15229:26;;15266:79;15342:1;15331:9;15327:17;15318:6;15266:79;:::i;:::-;15223:132;;;;:::o;15362:349::-;;15525:2;15514:9;15510:18;15502:26;;15539:79;15615:1;15604:9;15600:17;15591:6;15539:79;:::i;:::-;15629:72;15697:2;15686:9;15682:18;15673:6;15629:72;:::i;:::-;15496:215;;;;;:::o;15718:444::-;;15901:2;15890:9;15886:18;15878:26;;15915:71;15983:1;15972:9;15968:17;15959:6;15915:71;:::i;:::-;15997:72;16065:2;16054:9;16050:18;16041:6;15997:72;:::i;:::-;16080;16148:2;16137:9;16133:18;16124:6;16080:72;:::i;:::-;15872:290;;;;;;:::o;16169:333::-;;16324:2;16313:9;16309:18;16301:26;;16338:71;16406:1;16395:9;16391:17;16382:6;16338:71;:::i;:::-;16420:72;16488:2;16477:9;16473:18;16464:6;16420:72;:::i;:::-;16295:207;;;;;:::o;16509:210::-;;16630:2;16619:9;16615:18;16607:26;;16644:65;16706:1;16695:9;16691:17;16682:6;16644:65;:::i;:::-;16601:118;;;;:::o;16726:548::-;;16933:3;16922:9;16918:19;16910:27;;16948:71;17016:1;17005:9;17001:17;16992:6;16948:71;:::i;:::-;17030:68;17094:2;17083:9;17079:18;17070:6;17030:68;:::i;:::-;17109:72;17177:2;17166:9;17162:18;17153:6;17109:72;:::i;:::-;17192;17260:2;17249:9;17245:18;17236:6;17192:72;:::i;:::-;16904:370;;;;;;;:::o;17281:310::-;;17428:2;17417:9;17413:18;17405:26;;17478:9;17472:4;17468:20;17464:1;17453:9;17449:17;17442:47;17503:78;17576:4;17567:6;17503:78;:::i;:::-;17495:86;;17399:192;;;;:::o;17598:416::-;;17798:2;17787:9;17783:18;17775:26;;17848:9;17842:4;17838:20;17834:1;17823:9;17819:17;17812:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17769:245;;;:::o;18021:416::-;;18221:2;18210:9;18206:18;18198:26;;18271:9;18265:4;18261:20;18257:1;18246:9;18242:17;18235:47;18296:131;18422:4;18296:131;:::i;:::-;18288:139;;18192:245;;;:::o;18444:416::-;;18644:2;18633:9;18629:18;18621:26;;18694:9;18688:4;18684:20;18680:1;18669:9;18665:17;18658:47;18719:131;18845:4;18719:131;:::i;:::-;18711:139;;18615:245;;;:::o;18867:416::-;;19067:2;19056:9;19052:18;19044:26;;19117:9;19111:4;19107:20;19103:1;19092:9;19088:17;19081:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;19038:245;;;:::o;19290:416::-;;19490:2;19479:9;19475:18;19467:26;;19540:9;19534:4;19530:20;19526:1;19515:9;19511:17;19504:47;19565:131;19691:4;19565:131;:::i;:::-;19557:139;;19461:245;;;:::o;19713:416::-;;19913:2;19902:9;19898:18;19890:26;;19963:9;19957:4;19953:20;19949:1;19938:9;19934:17;19927:47;19988:131;20114:4;19988:131;:::i;:::-;19980:139;;19884:245;;;:::o;20136:416::-;;20336:2;20325:9;20321:18;20313:26;;20386:9;20380:4;20376:20;20372:1;20361:9;20357:17;20350:47;20411:131;20537:4;20411:131;:::i;:::-;20403:139;;20307:245;;;:::o;20559:416::-;;20759:2;20748:9;20744:18;20736:26;;20809:9;20803:4;20799:20;20795:1;20784:9;20780:17;20773:47;20834:131;20960:4;20834:131;:::i;:::-;20826:139;;20730:245;;;:::o;20982:416::-;;21182:2;21171:9;21167:18;21159:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21257:131;21383:4;21257:131;:::i;:::-;21249:139;;21153:245;;;:::o;21405:416::-;;21605:2;21594:9;21590:18;21582:26;;21655:9;21649:4;21645:20;21641:1;21630:9;21626:17;21619:47;21680:131;21806:4;21680:131;:::i;:::-;21672:139;;21576:245;;;:::o;21828:416::-;;22028:2;22017:9;22013:18;22005:26;;22078:9;22072:4;22068:20;22064:1;22053:9;22049:17;22042:47;22103:131;22229:4;22103:131;:::i;:::-;22095:139;;21999:245;;;:::o;22251:416::-;;22451:2;22440:9;22436:18;22428:26;;22501:9;22495:4;22491:20;22487:1;22476:9;22472:17;22465:47;22526:131;22652:4;22526:131;:::i;:::-;22518:139;;22422:245;;;:::o;22674:416::-;;22874:2;22863:9;22859:18;22851:26;;22924:9;22918:4;22914:20;22910:1;22899:9;22895:17;22888:47;22949:131;23075:4;22949:131;:::i;:::-;22941:139;;22845:245;;;:::o;23097:416::-;;23297:2;23286:9;23282:18;23274:26;;23347:9;23341:4;23337:20;23333:1;23322:9;23318:17;23311:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23268:245;;;:::o;23520:416::-;;23720:2;23709:9;23705:18;23697:26;;23770:9;23764:4;23760:20;23756:1;23745:9;23741:17;23734:47;23795:131;23921:4;23795:131;:::i;:::-;23787:139;;23691:245;;;:::o;23943:416::-;;24143:2;24132:9;24128:18;24120:26;;24193:9;24187:4;24183:20;24179:1;24168:9;24164:17;24157:47;24218:131;24344:4;24218:131;:::i;:::-;24210:139;;24114:245;;;:::o;24366:382::-;;24549:2;24538:9;24534:18;24526:26;;24599:9;24593:4;24589:20;24585:1;24574:9;24570:17;24563:47;24624:114;24733:4;24724:6;24624:114;:::i;:::-;24616:122;;24520:228;;;;:::o;24755:218::-;;24880:2;24869:9;24865:18;24857:26;;24894:69;24960:1;24949:9;24945:17;24936:6;24894:69;:::i;:::-;24851:122;;;;:::o;24980:325::-;;25131:2;25120:9;25116:18;25108:26;;25145:69;25211:1;25200:9;25196:17;25187:6;25145:69;:::i;:::-;25225:70;25291:2;25280:9;25276:18;25267:6;25225:70;:::i;:::-;25102:203;;;;;:::o;25312:325::-;;25463:2;25452:9;25448:18;25440:26;;25477:67;25541:1;25530:9;25526:17;25517:6;25477:67;:::i;:::-;25555:72;25623:2;25612:9;25608:18;25599:6;25555:72;:::i;:::-;25434:203;;;;;:::o;25644:648::-;;25873:3;25862:9;25858:19;25850:27;;25888:67;25952:1;25941:9;25937:17;25928:6;25888:67;:::i;:::-;25966:68;26030:2;26019:9;26015:18;26006:6;25966:68;:::i;:::-;26045:72;26113:2;26102:9;26098:18;26089:6;26045:72;:::i;:::-;26128;26196:2;26185:9;26181:18;26172:6;26128:72;:::i;:::-;26211:71;26277:3;26266:9;26262:19;26253:6;26211:71;:::i;:::-;25844:448;;;;;;;;:::o;26299:151::-;;26385:3;26377:11;;26423:4;26418:3;26414:14;26406:22;;26371:79;;;:::o;26457:137::-;;26566:5;26560:12;26550:22;;26531:63;;;:::o;26601:121::-;;26694:5;26688:12;26678:22;;26659:63;;;:::o;26729:122::-;;26823:5;26817:12;26807:22;;26788:63;;;:::o;26858:108::-;;26956:4;26951:3;26947:14;26939:22;;26933:33;;;:::o;26974:168::-;;27094:6;27089:3;27082:19;27131:4;27126:3;27122:14;27107:29;;27075:67;;;;:::o;27151:144::-;;27286:3;27271:18;;27264:31;;;;:::o;27304:163::-;;27419:6;27414:3;27407:19;27456:4;27451:3;27447:14;27432:29;;27400:67;;;;:::o;27475:91::-;;27537:24;27555:5;27537:24;:::i;:::-;27526:35;;27520:46;;;:::o;27573:85::-;;27646:5;27639:13;27632:21;27621:32;;27615:43;;;:::o;27665:72::-;;27727:5;27716:16;;27710:27;;;:::o;27744:121::-;;27817:42;27810:5;27806:54;27795:65;;27789:76;;;:::o;27872:72::-;;27934:5;27923:16;;27917:27;;;:::o;27951:88::-;;28023:10;28016:5;28012:22;28001:33;;27995:44;;;:::o;28046:81::-;;28117:4;28110:5;28106:16;28095:27;;28089:38;;;:::o;28134:129::-;;28221:37;28252:5;28221:37;:::i;:::-;28208:50;;28202:61;;;:::o;28270:121::-;;28349:37;28380:5;28349:37;:::i;:::-;28336:50;;28330:61;;;:::o;28398:108::-;;28477:24;28495:5;28477:24;:::i;:::-;28464:37;;28458:48;;;:::o;28514:268::-;28579:1;28586:101;28600:6;28597:1;28594:13;28586:101;;;28676:1;28671:3;28667:11;28661:18;28657:1;28652:3;28648:11;28641:39;28622:2;28619:1;28615:10;28610:15;;28586:101;;;28702:6;28699:1;28696:13;28693:2;;;28767:1;28758:6;28753:3;28749:16;28742:27;28693:2;28563:219;;;;:::o;28790:74::-;;28854:5;28843:16;;28837:27;;;:::o;28871:88::-;;28933:21;28948:5;28933:21;:::i;:::-;28922:32;;28916:43;;;:::o;28966:97::-;;29054:2;29050:7;29045:2;29038:5;29034:14;29030:28;29020:38;;29014:49;;;:::o;29071:96::-;;29151:5;29146:3;29142:15;29120:37;;29114:53;;;:::o;29175:117::-;29244:24;29262:5;29244:24;:::i;:::-;29237:5;29234:35;29224:2;;29283:1;29280;29273:12;29224:2;29218:74;:::o;29299:111::-;29365:21;29380:5;29365:21;:::i;:::-;29358:5;29355:32;29345:2;;29401:1;29398;29391:12;29345:2;29339:71;:::o;29417:117::-;29486:24;29504:5;29486:24;:::i;:::-;29479:5;29476:35;29466:2;;29525:1;29522;29515:12;29466:2;29460:74;:::o;29541:117::-;29610:24;29628:5;29610:24;:::i;:::-;29603:5;29600:35;29590:2;;29649:1;29646;29639:12;29590:2;29584:74;:::o;29665:115::-;29733:23;29750:5;29733:23;:::i;:::-;29726:5;29723:34;29713:2;;29771:1;29768;29761:12;29713:2;29707:73;:::o;29787:113::-;29854:22;29870:5;29854:22;:::i;:::-;29847:5;29844:33;29834:2;;29891:1;29888;29881:12;29834:2;29828:72;:::o", - "source": "// contracts/Wormhole.sol\n// SPDX-License-Identifier: Apache 2\n\n// TODO(hendrik): switch-over feature\n\npragma solidity ^0.6.0;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport \"./BytesLib.sol\";\nimport \"./WrappedAsset.sol\";\n\ncontract Wormhole is ReentrancyGuard {\n using SafeERC20 for IERC20;\n using BytesLib for bytes;\n using SafeMath for uint256;\n\n // Address of the Wrapped asset template\n address public wrappedAssetMaster;\n\n // Chain ID of Ethereum\n uint8 CHAIN_ID = 2;\n\n // Address of the official WETH contract\n address constant WETHAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\n\n struct GuardianSet {\n address[] keys;\n uint32 expiration_time;\n }\n\n event LogGuardianSetChanged(\n uint32 oldGuardianIndex,\n uint32 newGuardianIndex\n );\n\n event LogTokensLocked(\n uint8 target_chain,\n uint8 token_chain,\n bytes32 indexed token,\n bytes32 indexed sender,\n bytes32 recipient,\n uint256 amount,\n uint32 nonce\n );\n\n // Mapping of guardian_set_index => guardian set\n mapping(uint32 => GuardianSet) public guardian_sets;\n // Current active guardian set\n uint32 public guardian_set_index;\n\n // Period for which an vaa is valid in seconds\n uint32 public vaa_expiry;\n\n // Mapping of already consumedVAAs\n mapping(bytes32 => bool) consumedVAAs;\n\n // Mapping of wrapped asset ERC20 contracts\n mapping(bytes32 => address) public wrappedAssets;\n mapping(address => bool) public isWrappedAsset;\n\n constructor(GuardianSet memory initial_guardian_set, address wrapped_asset_master, uint32 _vaa_expiry) public {\n guardian_sets[0] = initial_guardian_set;\n // Explicitly set for doc purposes\n guardian_set_index = 0;\n vaa_expiry = _vaa_expiry;\n\n wrappedAssetMaster = wrapped_asset_master;\n }\n\n function getGuardianSet(uint32 idx) view public returns (GuardianSet memory gs) {\n return guardian_sets[idx];\n }\n\n function submitVAA(\n bytes calldata vaa\n ) public nonReentrant {\n uint8 version = vaa.toUint8(0);\n require(version == 1, \"VAA version incompatible\");\n\n // Load 4 bytes starting from index 1\n uint32 vaa_guardian_set_index = vaa.toUint32(1);\n\n uint256 len_signers = vaa.toUint8(5);\n uint offset = 6 + 66 * len_signers;\n\n // Load 4 bytes timestamp\n uint32 timestamp = vaa.toUint32(offset);\n\n // Verify that the VAA is still valid\n require(timestamp + vaa_expiry > block.timestamp, \"VAA has expired\");\n\n // Hash the body\n bytes32 hash = keccak256(vaa.slice(offset, vaa.length - offset));\n require(!consumedVAAs[hash], \"VAA was already executed\");\n\n GuardianSet memory guardian_set = guardian_sets[vaa_guardian_set_index];\n require(guardian_set.expiration_time == 0 || guardian_set.expiration_time > block.timestamp, \"guardian set has expired\");\n require(guardian_set.keys.length * 3 / 4 + 1 <= len_signers, \"no quorum\");\n\n for (uint i = 0; i < len_signers; i++) {\n uint8 index = vaa.toUint8(6 + i * 66);\n bytes32 r = vaa.toBytes32(7 + i * 66);\n bytes32 s = vaa.toBytes32(39 + i * 66);\n uint8 v = vaa.toUint8(71 + i * 66);\n v += 27;\n require(ecrecover(hash, v, r, s) == guardian_set.keys[index], \"VAA signature invalid\");\n }\n\n uint8 action = vaa.toUint8(offset + 4);\n bytes memory payload = vaa.slice(offset + 5, vaa.length - (offset + 5));\n\n // Process VAA\n if (action == 0x01) {\n require(vaa_guardian_set_index == guardian_set_index, \"only the current guardian set can change the guardian set\");\n vaaUpdateGuardianSet(payload);\n } else if (action == 0x10) {\n vaaTransfer(payload);\n } else {\n revert(\"invalid VAA action\");\n }\n\n // Set the VAA as consumed\n consumedVAAs[hash] = true;\n }\n\n function vaaUpdateGuardianSet(bytes memory data) private {\n uint32 new_guardian_set_index = data.toUint32(0);\n uint8 len = data.toUint8(4);\n\n address[] memory new_guardians = new address[](len);\n for (uint i = 0; i < len; i++) {\n address addr = data.toAddress(5 + i * 20);\n new_guardians[i] = addr;\n }\n\n uint32 old_guardian_set_index = guardian_set_index;\n guardian_set_index = new_guardian_set_index;\n\n GuardianSet memory new_guardian_set = GuardianSet(new_guardians, 0);\n guardian_sets[guardian_set_index] = new_guardian_set;\n guardian_sets[old_guardian_set_index].expiration_time = uint32(block.timestamp) + vaa_expiry;\n\n emit LogGuardianSetChanged(old_guardian_set_index, guardian_set_index);\n }\n\n function vaaTransfer(bytes memory data) private {\n //uint32 nonce = data.toUint64(0);\n uint8 source_chain = data.toUint8(4);\n\n uint8 target_chain = data.toUint8(5);\n //bytes32 source_address = data.toBytes32(6);\n //bytes32 target_address = data.toBytes32(38);\n address target_address = data.toAddress(38 + 12);\n\n uint8 token_chain = data.toUint8(70);\n //bytes32 token_address = data.toBytes32(71);\n uint256 amount = data.toUint256(103);\n\n require(source_chain != target_chain, \"same chain transfers are not supported\");\n require(target_chain == CHAIN_ID, \"transfer must be incoming\");\n\n if (token_chain != CHAIN_ID) {\n bytes32 token_address = data.toBytes32(71);\n bytes32 asset_id = keccak256(abi.encodePacked(token_chain, token_address));\n\n // if yes: mint to address\n // if no: create and mint\n address wrapped_asset = wrappedAssets[asset_id];\n if (wrapped_asset == address(0)) {\n wrapped_asset = deployWrappedAsset(asset_id, token_chain, token_address);\n }\n\n WrappedAsset(wrapped_asset).mint(target_address, amount);\n } else {\n address token_address = data.toAddress(71 + 12);\n\n IERC20(token_address).safeTransfer(target_address, amount);\n }\n }\n\n function deployWrappedAsset(bytes32 seed, uint8 token_chain, bytes32 token_address) private returns (address asset){\n // Taken from https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/ProxyFactory.sol\n // Licensed under MIT\n bytes20 targetBytes = bytes20(wrappedAssetMaster);\n assembly {\n let clone := mload(0x40)\n mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(clone, 0x14), targetBytes)\n mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n asset := create(0, clone, 0x37)\n }\n\n // Call initializer\n WrappedAsset(asset).initialize(token_chain, token_address);\n\n // Store address\n wrappedAssets[seed] = asset;\n isWrappedAsset[asset] = true;\n }\n\n // TODO(hendrik): nonce\n function lockAssets(\n address asset,\n uint256 amount,\n bytes32 recipient,\n uint8 target_chain,\n uint32 nonce\n ) public nonReentrant {\n require(amount != 0, \"amount must not be 0\");\n\n uint8 asset_chain = CHAIN_ID;\n bytes32 asset_address;\n if (isWrappedAsset[asset]) {\n WrappedAsset(asset).burn(msg.sender, amount);\n asset_chain = WrappedAsset(asset).assetChain();\n asset_address = WrappedAsset(asset).assetAddress();\n } else {\n uint256 balanceBefore = IERC20(asset).balanceOf(address(this));\n IERC20(asset).safeTransferFrom(msg.sender, address(this), amount);\n uint256 balanceAfter = IERC20(asset).balanceOf(address(this));\n\n // The amount that was transferred in is the delta between balance before and after the transfer.\n // This is to properly handle tokens that charge a fee on transfer.\n amount = balanceAfter.sub(balanceBefore);\n asset_address = bytes32(uint256(asset));\n }\n\n emit LogTokensLocked(target_chain, asset_chain, asset_address, bytes32(uint256(msg.sender)), recipient, amount, nonce);\n }\n\n function lockETH(\n bytes32 recipient,\n uint8 target_chain,\n uint32 nonce\n ) public payable nonReentrant {\n require(msg.value != 0, \"amount must not be 0\");\n\n // Wrap tx value in WETH\n WETH(WETHAddress).deposit{value : msg.value}();\n\n // Log deposit of WETH\n emit LogTokensLocked(target_chain, CHAIN_ID, bytes32(uint256(WETHAddress)), bytes32(uint256(msg.sender)), recipient, msg.value, nonce);\n }\n\n\nfallback() external payable {revert(\"please use lockETH to transfer ETH to Solana\");}\nreceive() external payable {revert(\"please use lockETH to transfer ETH to Solana\");}\n}\n\n\ninterface WETH is IERC20 {\nfunction deposit() external payable;\n\nfunction withdraw(uint256 amount) external;\n}\n", + "sourceMap": "502:8862:1:-:0;;;770:1;753:18;;;;;;;;;;;;;;;;;;;;1902:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1628:1:9;1743:7;:22;;;;2052:20:1;2033:13;:16;2047:1;2033:16;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2146:1;2125:18;;:22;;;;;;;;;;;;;;;;;;2181;2157:21;;:46;;;;;;;;;;;;;;;;;;2235:20;2214:18;;:41;;;;;;;;;;;;;;;;;;1902:360;;;502:8862;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:134:-1:-;;89:6;83:13;74:22;;101:33;128:5;101:33;:::i;:::-;68:71;;;;:::o;164:722::-;;292:3;285:4;277:6;273:17;269:27;259:2;;310:1;307;300:12;259:2;340:6;334:13;362:80;377:64;434:6;377:64;:::i;:::-;362:80;:::i;:::-;353:89;;459:5;484:6;477:5;470:21;514:4;506:6;502:17;492:27;;536:4;531:3;527:14;520:21;;589:6;636:3;628:4;620:6;616:17;611:3;607:27;604:36;601:2;;;653:1;650;643:12;601:2;678:1;663:217;688:6;685:1;682:13;663:217;;;746:3;768:48;812:3;800:10;768:48;:::i;:::-;763:3;756:61;840:4;835:3;831:14;824:21;;868:4;863:3;859:14;852:21;;720:160;710:1;707;703:9;698:14;;663:217;;;667:14;252:634;;;;;;;:::o;928:617::-;;1056:4;1044:9;1039:3;1035:19;1031:30;1028:2;;;1074:1;1071;1064:12;1028:2;1092:20;1107:4;1092:20;:::i;:::-;1083:29;;1183:1;1172:9;1168:17;1162:24;1206:18;1198:6;1195:30;1192:2;;;1238:1;1235;1228:12;1192:2;1273:85;1354:3;1345:6;1334:9;1330:22;1273:85;:::i;:::-;1266:4;1259:5;1255:16;1248:111;1122:248;1431:2;1464:59;1519:3;1510:6;1499:9;1495:22;1464:59;:::i;:::-;1457:4;1450:5;1446:16;1439:85;1380:155;1022:523;;;;:::o;1552:132::-;;1635:6;1629:13;1620:22;;1647:32;1673:5;1647:32;:::i;:::-;1614:70;;;;:::o;1691:668::-;;;;1867:2;1855:9;1846:7;1842:23;1838:32;1835:2;;;1883:1;1880;1873:12;1835:2;1939:1;1928:9;1924:17;1918:24;1962:18;1954:6;1951:30;1948:2;;;1994:1;1991;1984:12;1948:2;2014:92;2098:7;2089:6;2078:9;2074:22;2014:92;:::i;:::-;2004:102;;1897:215;2143:2;2161:64;2217:7;2208:6;2197:9;2193:22;2161:64;:::i;:::-;2151:74;;2122:109;2262:2;2280:63;2335:7;2326:6;2315:9;2311:22;2280:63;:::i;:::-;2270:73;;2241:108;1829:530;;;;;:::o;2366:256::-;;2428:2;2422:9;2412:19;;2466:4;2458:6;2454:17;2565:6;2553:10;2550:22;2529:18;2517:10;2514:34;2511:62;2508:2;;;2586:1;2583;2576:12;2508:2;2606:10;2602:2;2595:22;2406:216;;;;:::o;2629:304::-;;2788:18;2780:6;2777:30;2774:2;;;2820:1;2817;2810:12;2774:2;2855:4;2847:6;2843:17;2835:25;;2918:4;2912;2908:15;2900:23;;2711:222;;;:::o;2940:91::-;;3002:24;3020:5;3002:24;:::i;:::-;2991:35;;2985:46;;;:::o;3038:121::-;;3111:42;3104:5;3100:54;3089:65;;3083:76;;;:::o;3166:88::-;;3238:10;3231:5;3227:22;3216:33;;3210:44;;;:::o;3261:117::-;3330:24;3348:5;3330:24;:::i;:::-;3323:5;3320:35;3310:2;;3369:1;3366;3359:12;3310:2;3304:74;:::o;3385:115::-;3453:23;3470:5;3453:23;:::i;:::-;3446:5;3443:34;3433:2;;3491:1;3488;3481:12;3433:2;3427:73;:::o;502:8862:1:-;;;;;;;", + "deployedSourceMap": "502:8862:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9306:54;;;;;;;;;;:::i;:::-;;;;;;;;502:8862;9221:54;;;;;;;;;;:::i;:::-;;;;;;;;7492:1229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1849:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2396:1874;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1405:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8727:462;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1497:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;685:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1696:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1795:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2268:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7492:1229;1671:1:9;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;7690:1:1::1;7680:6;:11;;7672:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;7727:17;7747:8;;;;;;;;;;;7727:28;;7765:21;7800:14;:21;7815:5;7800:21;;;;;;;;;;;;;;;;;;;;;;;;;7796:765;;;7850:5;7837:24;;;7862:10;7874:6;7837:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7922:5;7909:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7895:46;;7984:5;7971:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7955:50;;7796:765;;;8036:21;8067:5;8060:23;;;8092:4;8060:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8036:62;;8112:65;8143:10;8163:4;8170:6;8119:5;8112:30;;;;:65;;;;;;:::i;:::-;8191:20;8221:5;8214:23;;;8246:4;8214:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8191:61;;8466:31;8483:13;8466:12;:16;;:31;;;;:::i;:::-;8457:40;;8543:5;8535:14;;8527:23;;8511:39;;7796:765;;;8675:10;8667:19;;8659:28;;8644:13;8576:138;8592:12;8606:11;8625:5;8619:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8689:9;8700:6;8708:5;8576:138;;;;;;;;;;;:::i;:::-;;;;;;;;2419:1:9;;1628::::0;2563:7;:22;;;;7492:1229:1;;;;;:::o;1849:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2396:1874::-;1671:1:9;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;2479:13:1::1;2495:14;2507:1;2495:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;;;:::i;:::-;2479:30;;2538:1;2527:7;:12;;;2519:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2625:29;2657:15;2670:1;2657:3;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;:::i;:::-;2625:47;;2683:19;2705:14;2717:1;2705:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;;;:::i;:::-;2683:36;;;;2729:11;2752;2747:2;:16;2743:1;:20;2729:34;;2885:12;2910:38;2920:6;2941;2928:3;;:10;;:19;2910:3;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;:::i;:::-;2900:49;;;;;;2885:64;;2968:12;:18;2981:4;2968:18;;;;;;;;;;;;;;;;;;;;;2967:19;2959:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3026:31;;:::i;:::-;3060:13;:37;3074:22;3060:37;;;;;;;;;;;;;;;3026:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;3147:1;3115:12;:28;;;:33;;;:83;;;;3183:15;3152:12;:28;;;:46;;;3115:83;3107:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;3289:11;3284:1;3279;3274;3247:12;:17;;;:24;:28;;;;;;3246:34;3245:40;:55;;3237:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3330:6;3325:373;3346:11;3342:1;:15;3325:373;;;3378:11;3392:23;3412:2;3408:1;:6;3404:1;:10;3392:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;3378:37;;3429:9;3441:25;3463:2;3459:1;:6;3455:1;:10;3441:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;3429:37;;3480:9;3492:26;3515:2;3511:1;:6;3506:2;:11;3492:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;3480:38;;3532:7;3542:24;3563:2;3559:1;:6;3554:2;:11;3542:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;3532:34;;3585:2;3580:7;;;;3637:12;:17;;;3655:5;3637:24;;;;;;;;;;;;;;;;3609:52;;:24;3619:4;3625:1;3628;3631;3609:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;:52;;;3601:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;3325:373;;;;3359:3;;;;;;;3325:373;;;;3708:12;3723:23;3744:1;3735:6;:10;3723:3;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;3708:38;;3756:20;3779:48;3798:1;3789:6;:10;3824:1;3815:6;:10;3801:3;;:10;;:25;3779:3;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;:::i;:::-;3756:71;;3875:4;3865:6;:14;;;3861:332;;;3929:18;;;;;;;;;;;3903:44;;:22;:44;;;3895:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;4023:29;4044:7;4023:20;:29::i;:::-;3861:332;;;4083:4;4073:6;:14;;;4069:124;;;4103:20;4115:7;4103:11;:20::i;:::-;4069:124;;;4154:28;;;;;;;;;;:::i;:::-;;;;;;;;4069:124;3861:332;4259:4;4238:12;:18;4251:4;4238:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2419:1:9;;;;;;;;1628::::0;2563:7;:22;;;;2396:1874:1;;:::o;1405:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1615:35::-;;;;;;;;;;;;;:::o;8727:462::-;1671:1:9;2260:7;;:19;;2252:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1671:1;2390:7;:18;;;;8886:1:1::1;8873:9;:14;;8865:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;854:42;8956:25;;;8990:9;8956:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;9140:10;9132:19;;9124:28;;854:42;9101:20;;9093:29;;9049:133;9065:12;9079:8;;;;;;;;;;;9089:2;9154:9;9165;9176:5;9049:133;;;;;;;;;;;:::i;:::-;;;;;;;;1628:1:9::0;2563:7;:22;;;;8727:462:1;;;:::o;1497:32::-;;;;;;;;;;;;;:::o;685:33::-;;;;;;;;;;;;;:::o;1696:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;1795:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2268:122::-;2325:21;;:::i;:::-;2365:13;:18;2379:3;2365:18;;;;;;;;;;;;;;;2358:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:122;;;:::o;877:203:7:-;977:96;997:5;1027:27;;;1056:4;1062:2;1066:5;1004:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;977:19;:96::i;:::-;877:203;;;;:::o;1321:134:4:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;11710:302:0:-;11787:5;11839:1;11830:6;:10;11812:6;:13;:29;;11804:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11874:14;11962:6;11956:3;11948:6;11944:16;11940:29;11934:36;11922:48;;11997:8;11990:15;;;11710:302;;;;:::o;12329:305::-;12407:6;12460:1;12451:6;:10;12433:6;:13;:29;;12425:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12495:15;12584:6;12578:3;12570:6;12566:16;12562:29;12556:36;12544:48;;12619:8;12612:15;;;12329:305;;;;:::o;8865:2480::-;8999:12;9062:7;9053:6;:16;9035:6;:13;:35;;9027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;9104:22;9174:7;9167:15;9200:1;9195:1895;;;;11231:4;11225:11;11212:24;;11282:4;11271:9;11267:20;11261:4;11254:34;9160:2142;;9195:1895;9369:4;9363:11;9350:24;;9996:2;9987:7;9983:16;10362:9;10355:17;10349:4;10345:28;10333:9;10322;10318:25;10314:60;10410:7;10406:2;10402:16;10654:6;10640:9;10633:17;10627:4;10623:28;10611:9;10603:6;10599:22;10595:57;10591:70;10436:417;10687:3;10683:2;10680:11;10436:417;;;10831:2;10825:9;10821:2;10814:21;10728:4;10724:2;10720:13;10714:19;;10768:4;10764:2;10760:13;10754:19;;10436:417;;;10440:239;10889:7;10878:9;10871:26;11071:2;11067:7;11062:2;11058;11054:11;11050:25;11044:4;11037:39;9202:1888;;;9160:2142;;11329:9;11322:16;;;8865:2480;;;;;:::o;13895:319::-;13974:7;14028:2;14019:6;:11;14001:6;:13;:30;;13993:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14064:19;14161:6;14154:4;14146:6;14142:17;14138:30;14132:37;14117:52;;14196:11;14189:18;;;13895:319;;;;:::o;4276:812:1:-;4343:29;4375:16;4389:1;4375:4;:13;;:16;;;;:::i;:::-;4343:48;;4401:9;4413:15;4426:1;4413:4;:12;;:15;;;;:::i;:::-;4401:27;;4439:30;4486:3;4472:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4439:51;;4505:6;4500:134;4521:3;4517:7;;:1;:7;4500:134;;;4545:12;4560:26;4583:2;4579:1;:6;4575:1;:10;4560:4;:14;;:26;;;;:::i;:::-;4545:41;;4619:4;4600:13;4614:1;4600:16;;;;;;;;;;;;;:23;;;;;;;;;;;4500:134;4526:3;;;;;;;4500:134;;;;4644:29;4676:18;;;;;;;;;;;4644:50;;4725:22;4704:18;;:43;;;;;;;;;;;;;;;;;;4758:35;;:::i;:::-;4796:29;;;;;;;;4808:13;4796:29;;;;4823:1;4796:29;;;;;4758:67;;4871:16;4835:13;:33;4849:18;;;;;;;;;;;4835:33;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4979:21;;;;;;;;;;;4960:15;4953:47;4897:13;:37;4911:22;4897:37;;;;;;;;;;;;;;;:53;;;:103;;;;;;;;;;;;;;;;;;5016:65;5038:22;5062:18;;;;;;;;;;;5016:65;;;;;;;:::i;:::-;;;;;;;;4276:812;;;;;;:::o;5094:1447::-;5195:18;5216:15;5229:1;5216:4;:12;;:15;;;;:::i;:::-;5195:36;;5242:18;5263:15;5276:1;5263:4;:12;;:15;;;;:::i;:::-;5242:36;;5397:22;5422:23;5437:7;5422:4;:14;;:23;;;;:::i;:::-;5397:48;;5456:17;5476:16;5489:2;5476:4;:12;;:16;;;;:::i;:::-;5456:36;;5556:14;5573:19;5588:3;5573:4;:14;;:19;;;;:::i;:::-;5556:36;;5627:12;5611:28;;:12;:28;;;;5603:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5716:8;;;;;;;;;;;5700:24;;:12;:24;;;5692:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5784:8;;;;;;;;;;;5769:23;;:11;:23;;;5765:770;;5808:21;5832:18;5847:2;5832:4;:14;;:18;;;;:::i;:::-;5808:42;;5864:16;5910:11;5923:13;5893:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5883:55;;;;;;5864:74;;6030:21;6054:13;:23;6068:8;6054:23;;;;;;;;;;;;;;;;;;;;;6030:47;;6120:1;6095:27;;:13;:27;;;6091:212;;;6142:20;6165:17;6178:3;6165:4;:12;;:17;;;;:::i;:::-;6142:40;;6216:72;6235:8;6245:11;6258:13;6273:14;6216:18;:72::i;:::-;6200:88;;6091:212;;6330:13;6317:32;;;6350:14;6366:6;6317:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5765:770;;;;;;6404:21;6428:23;6443:7;6428:4;:14;;:23;;;;:::i;:::-;6404:47;;6466:58;6501:14;6517:6;6473:13;6466:34;;;;:58;;;;;:::i;:::-;5765:770;;5094:1447;;;;;;:::o;2959:751:7:-;3378:23;3404:69;3432:4;3404:69;;;;;;;;;;;;;;;;;3412:5;3404:27;;;;:69;;;;;:::i;:::-;3378:95;;3507:1;3487:10;:17;:21;3483:221;;;3627:10;3616:30;;;;;;;;;;;;:::i;:::-;3608:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3483:221;2959:751;;;:::o;1746:187:4:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;11351:353:0:-;11430:7;11484:2;11475:6;:11;11457:6;:13;:30;;11449:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;11520:19;11631:27;11621:6;11614:4;11606:6;11602:17;11598:30;11592:37;11588:71;11573:86;;11686:11;11679:18;;;11351:353;;;;:::o;13579:310::-;13658:7;13712:2;13703:6;:11;13685:6;:13;:30;;13677:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;13748:16;13839:6;13832:4;13824:6;13820:17;13816:30;13810:37;13798:49;;13874:8;13867:15;;;13579:310;;;;:::o;6547:939:1:-;6664:13;6856:19;6886:18;;;;;;;;;;;6878:27;;6856:49;;6957:4;6951:11;6989:66;6982:5;6975:81;7094:11;7087:4;7080:5;7076:16;7069:37;7144:66;7137:4;7130:5;7126:16;7119:92;7257:4;7251;7244:5;7241:1;7233:29;7224:38;;6924:348;7323:5;7310:30;;;7341:11;7354:13;7369:8;7310:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7436:5;7414:13;:19;7428:4;7414:19;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;7475:4;7451:14;:21;7466:5;7451:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6547:939;;;;;;;:::o;696:175:7:-;778:86;798:5;828:23;;;853:2;857:5;805:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;778:19;:86::i;:::-;696:175;;;:::o;3770:194:8:-;3873:12;3904:53;3927:6;3935:4;3941:1;3944:12;3904:22;:53::i;:::-;3897:60;;3770:194;;;;;:::o;5117:958::-;5247:12;5279:18;5290:6;5279:10;:18::i;:::-;5271:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5402:12;5416:23;5443:6;:11;;5463:8;5474:4;5443:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:78;;;;5493:7;5489:580;;;5523:10;5516:17;;;;;;5489:580;5654:1;5634:10;:17;:21;5630:429;;;5892:10;5886:17;5952:15;5939:10;5935:2;5931:19;5924:44;5841:145;6031:12;6024:20;;;;;;;;;;;:::i;:::-;;;;;;;;5117:958;;;;;;;:::o;718:610::-;778:4;1036:16;1062:19;1084:66;1062:88;;;;1251:7;1239:20;1227:32;;1290:11;1278:8;:23;;:42;;;;;1317:3;1305:15;;:8;:15;;1278:42;1270:51;;;;718:610;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:128::-;;223:6;217:13;208:22;;235:30;259:5;235:30;:::i;:::-;202:68;;;;:::o;277:130::-;;357:6;344:20;335:29;;369:33;396:5;369:33;:::i;:::-;329:78;;;;:::o;414:134::-;;498:6;492:13;483:22;;510:33;537:5;510:33;:::i;:::-;477:71;;;;:::o;569:336::-;;;683:3;676:4;668:6;664:17;660:27;650:2;;701:1;698;691:12;650:2;734:6;721:20;711:30;;761:18;753:6;750:30;747:2;;;793:1;790;783:12;747:2;827:4;819:6;815:17;803:29;;878:3;870:4;862:6;858:17;848:8;844:32;841:41;838:2;;;895:1;892;885:12;838:2;643:262;;;;;:::o;913:130::-;;993:6;980:20;971:29;;1005:33;1032:5;1005:33;:::i;:::-;965:78;;;;:::o;1050:134::-;;1134:6;1128:13;1119:22;;1146:33;1173:5;1146:33;:::i;:::-;1113:71;;;;:::o;1191:128::-;;1270:6;1257:20;1248:29;;1282:32;1308:5;1282:32;:::i;:::-;1242:77;;;;:::o;1326:126::-;;1404:6;1391:20;1382:29;;1416:31;1441:5;1416:31;:::i;:::-;1376:76;;;;:::o;1459:130::-;;1541:6;1535:13;1526:22;;1553:31;1578:5;1553:31;:::i;:::-;1520:69;;;;:::o;1596:241::-;;1700:2;1688:9;1679:7;1675:23;1671:32;1668:2;;;1716:1;1713;1706:12;1668:2;1751:1;1768:53;1813:7;1804:6;1793:9;1789:22;1768:53;:::i;:::-;1758:63;;1730:97;1662:175;;;;:::o;1844:737::-;;;;;;2013:3;2001:9;1992:7;1988:23;1984:33;1981:2;;;2030:1;2027;2020:12;1981:2;2065:1;2082:53;2127:7;2118:6;2107:9;2103:22;2082:53;:::i;:::-;2072:63;;2044:97;2172:2;2190:53;2235:7;2226:6;2215:9;2211:22;2190:53;:::i;:::-;2180:63;;2151:98;2280:2;2298:53;2343:7;2334:6;2323:9;2319:22;2298:53;:::i;:::-;2288:63;;2259:98;2388:2;2406:51;2449:7;2440:6;2429:9;2425:22;2406:51;:::i;:::-;2396:61;;2367:96;2494:3;2513:52;2557:7;2548:6;2537:9;2533:22;2513:52;:::i;:::-;2503:62;;2473:98;1975:606;;;;;;;;:::o;2588:257::-;;2700:2;2688:9;2679:7;2675:23;2671:32;2668:2;;;2716:1;2713;2706:12;2668:2;2751:1;2768:61;2821:7;2812:6;2801:9;2797:22;2768:61;:::i;:::-;2758:71;;2730:105;2662:183;;;;:::o;2852:241::-;;2956:2;2944:9;2935:7;2931:23;2927:32;2924:2;;;2972:1;2969;2962:12;2924:2;3007:1;3024:53;3069:7;3060:6;3049:9;3045:22;3024:53;:::i;:::-;3014:63;;2986:97;2918:175;;;;:::o;3100:263::-;;3215:2;3203:9;3194:7;3190:23;3186:32;3183:2;;;3231:1;3228;3221:12;3183:2;3266:1;3283:64;3339:7;3330:6;3319:9;3315:22;3283:64;:::i;:::-;3273:74;;3245:108;3177:186;;;;:::o;3370:485::-;;;;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3521:1;3518;3511:12;3473:2;3556:1;3573:53;3618:7;3609:6;3598:9;3594:22;3573:53;:::i;:::-;3563:63;;3535:97;3663:2;3681:51;3724:7;3715:6;3704:9;3700:22;3681:51;:::i;:::-;3671:61;;3642:96;3769:2;3787:52;3831:7;3822:6;3811:9;3807:22;3787:52;:::i;:::-;3777:62;;3748:97;3467:388;;;;;:::o;3862:365::-;;;3985:2;3973:9;3964:7;3960:23;3956:32;3953:2;;;4001:1;3998;3991:12;3953:2;4064:1;4053:9;4049:17;4036:31;4087:18;4079:6;4076:30;4073:2;;;4119:1;4116;4109:12;4073:2;4147:64;4203:7;4194:6;4183:9;4179:22;4147:64;:::i;:::-;4129:82;;;;4015:202;3947:280;;;;;:::o;4234:263::-;;4349:2;4337:9;4328:7;4324:23;4320:32;4317:2;;;4365:1;4362;4355:12;4317:2;4400:1;4417:64;4473:7;4464:6;4453:9;4449:22;4417:64;:::i;:::-;4407:74;;4379:108;4311:186;;;;:::o;4504:239::-;;4607:2;4595:9;4586:7;4582:23;4578:32;4575:2;;;4623:1;4620;4613:12;4575:2;4658:1;4675:52;4719:7;4710:6;4699:9;4695:22;4675:52;:::i;:::-;4665:62;;4637:96;4569:174;;;;:::o;4750:259::-;;4863:2;4851:9;4842:7;4838:23;4834:32;4831:2;;;4879:1;4876;4869:12;4831:2;4914:1;4931:62;4985:7;4976:6;4965:9;4961:22;4931:62;:::i;:::-;4921:72;;4893:106;4825:184;;;;:::o;5017:173::-;;5104:46;5146:3;5138:6;5104:46;:::i;:::-;5179:4;5174:3;5170:14;5156:28;;5097:93;;;;:::o;5198:142::-;5289:45;5328:5;5289:45;:::i;:::-;5284:3;5277:58;5271:69;;:::o;5347:103::-;5420:24;5438:5;5420:24;:::i;:::-;5415:3;5408:37;5402:48;;:::o;5457:113::-;5540:24;5558:5;5540:24;:::i;:::-;5535:3;5528:37;5522:48;;:::o;5608:670::-;;5743:54;5791:5;5743:54;:::i;:::-;5810:76;5879:6;5874:3;5810:76;:::i;:::-;5803:83;;5907:56;5957:5;5907:56;:::i;:::-;5983:7;6011:1;5996:260;6021:6;6018:1;6015:13;5996:260;;;6088:6;6082:13;6109:63;6168:3;6153:13;6109:63;:::i;:::-;6102:70;;6189:60;6242:6;6189:60;:::i;:::-;6179:70;;6053:203;6043:1;6040;6036:9;6031:14;;5996:260;;;6000:14;6269:3;6262:10;;5722:556;;;;;;;:::o;6286:104::-;6363:21;6378:5;6363:21;:::i;:::-;6358:3;6351:34;6345:45;;:::o;6397:113::-;6480:24;6498:5;6480:24;:::i;:::-;6475:3;6468:37;6462:48;;:::o;6517:152::-;6618:45;6638:24;6656:5;6638:24;:::i;:::-;6618:45;:::i;:::-;6613:3;6606:58;6600:69;;:::o;6676:356::-;;6804:38;6836:5;6804:38;:::i;:::-;6854:88;6935:6;6930:3;6854:88;:::i;:::-;6847:95;;6947:52;6992:6;6987:3;6980:4;6973:5;6969:16;6947:52;:::i;:::-;7020:6;7015:3;7011:16;7004:23;;6784:248;;;;;:::o;7039:140::-;7129:44;7167:5;7129:44;:::i;:::-;7124:3;7117:57;7111:68;;:::o;7186:347::-;;7298:39;7331:5;7298:39;:::i;:::-;7349:71;7413:6;7408:3;7349:71;:::i;:::-;7342:78;;7425:52;7470:6;7465:3;7458:4;7451:5;7447:16;7425:52;:::i;:::-;7498:29;7520:6;7498:29;:::i;:::-;7493:3;7489:39;7482:46;;7278:255;;;;;:::o;7541:318::-;;7701:67;7765:2;7760:3;7701:67;:::i;:::-;7694:74;;7801:20;7797:1;7792:3;7788:11;7781:41;7850:2;7845:3;7841:12;7834:19;;7687:172;;;:::o;7868:324::-;;8028:67;8092:2;8087:3;8028:67;:::i;:::-;8021:74;;8128:26;8124:1;8119:3;8115:11;8108:47;8183:2;8178:3;8174:12;8167:19;;8014:178;;;:::o;8201:381::-;;8361:67;8425:2;8420:3;8361:67;:::i;:::-;8354:74;;8461:34;8457:1;8452:3;8448:11;8441:55;8530:14;8525:2;8520:3;8516:12;8509:36;8573:2;8568:3;8564:12;8557:19;;8347:235;;;:::o;8591:394::-;;8751:67;8815:2;8810:3;8751:67;:::i;:::-;8744:74;;8851:34;8847:1;8842:3;8838:11;8831:55;8920:27;8915:2;8910:3;8906:12;8899:49;8976:2;8971:3;8967:12;8960:19;;8737:248;;;:::o;8994:318::-;;9154:67;9218:2;9213:3;9154:67;:::i;:::-;9147:74;;9254:20;9250:1;9245:3;9241:11;9234:41;9303:2;9298:3;9294:12;9287:19;;9140:172;;;:::o;9321:324::-;;9481:67;9545:2;9540:3;9481:67;:::i;:::-;9474:74;;9581:26;9577:1;9572:3;9568:11;9561:47;9636:2;9631:3;9627:12;9620:19;;9467:178;;;:::o;9654:321::-;;9814:67;9878:2;9873:3;9814:67;:::i;:::-;9807:74;;9914:23;9910:1;9905:3;9901:11;9894:44;9966:2;9961:3;9957:12;9950:19;;9800:175;;;:::o;9984:308::-;;10144:66;10208:1;10203:3;10144:66;:::i;:::-;10137:73;;10243:11;10239:1;10234:3;10230:11;10223:32;10283:2;10278:3;10274:12;10267:19;;10130:162;;;:::o;10301:320::-;;10461:67;10525:2;10520:3;10461:67;:::i;:::-;10454:74;;10561:22;10557:1;10552:3;10548:11;10541:43;10612:2;10607:3;10603:12;10596:19;;10447:174;;;:::o;10630:325::-;;10790:67;10854:2;10849:3;10790:67;:::i;:::-;10783:74;;10890:27;10886:1;10881:3;10877:11;10870:48;10946:2;10941:3;10937:12;10930:19;;10776:179;;;:::o;10964:324::-;;11124:67;11188:2;11183:3;11124:67;:::i;:::-;11117:74;;11224:26;11220:1;11215:3;11211:11;11204:47;11279:2;11274:3;11270:12;11263:19;;11110:178;;;:::o;11297:329::-;;11457:67;11521:2;11516:3;11457:67;:::i;:::-;11450:74;;11557:31;11553:1;11548:3;11544:11;11537:52;11617:2;11612:3;11608:12;11601:19;;11443:183;;;:::o;11635:379::-;;11795:67;11859:2;11854:3;11795:67;:::i;:::-;11788:74;;11895:34;11891:1;11886:3;11882:11;11875:55;11964:12;11959:2;11954:3;11950:12;11943:34;12005:2;12000:3;11996:12;11989:19;;11781:233;;;:::o;12023:375::-;;12183:67;12247:2;12242:3;12183:67;:::i;:::-;12176:74;;12283:34;12279:1;12274:3;12270:11;12263:55;12352:8;12347:2;12342:3;12338:12;12331:30;12389:2;12384:3;12380:12;12373:19;;12169:229;;;:::o;12407:331::-;;12567:67;12631:2;12626:3;12567:67;:::i;:::-;12560:74;;12667:33;12663:1;12658:3;12654:11;12647:54;12729:2;12724:3;12720:12;12713:19;;12553:185;;;:::o;12811:616::-;;12968:4;12963:3;12959:14;13051:4;13044:5;13040:16;13034:23;13103:3;13097:4;13093:14;13086:4;13081:3;13077:14;13070:38;13123:103;13221:4;13207:12;13123:103;:::i;:::-;13115:111;;12988:250;13322:4;13315:5;13311:16;13305:23;13334:61;13389:4;13384:3;13380:14;13366:12;13334:61;:::i;:::-;13248:153;13418:4;13411:11;;12941:486;;;;;:::o;13434:113::-;13517:24;13535:5;13517:24;:::i;:::-;13512:3;13505:37;13499:48;;:::o;13554:100::-;13625:23;13642:5;13625:23;:::i;:::-;13620:3;13613:36;13607:47;;:::o;13661:110::-;13742:23;13759:5;13742:23;:::i;:::-;13737:3;13730:36;13724:47;;:::o;13778:107::-;13857:22;13873:5;13857:22;:::i;:::-;13852:3;13845:35;13839:46;;:::o;13892:144::-;13989:41;14007:22;14023:5;14007:22;:::i;:::-;13989:41;:::i;:::-;13984:3;13977:54;13971:65;;:::o;14043:271::-;;14196:93;14285:3;14276:6;14196:93;:::i;:::-;14189:100;;14306:3;14299:10;;14177:137;;;;:::o;14321:383::-;;14473:71;14540:3;14531:6;14473:71;:::i;:::-;14566:1;14561:3;14557:11;14550:18;;14579:75;14650:3;14641:6;14579:75;:::i;:::-;14676:2;14671:3;14667:12;14660:19;;14696:3;14689:10;;14461:243;;;;;:::o;14711:222::-;;14838:2;14827:9;14823:18;14815:26;;14852:71;14920:1;14909:9;14905:17;14896:6;14852:71;:::i;:::-;14809:124;;;;:::o;14940:238::-;;15075:2;15064:9;15060:18;15052:26;;15089:79;15165:1;15154:9;15150:17;15141:6;15089:79;:::i;:::-;15046:132;;;;:::o;15185:349::-;;15348:2;15337:9;15333:18;15325:26;;15362:79;15438:1;15427:9;15423:17;15414:6;15362:79;:::i;:::-;15452:72;15520:2;15509:9;15505:18;15496:6;15452:72;:::i;:::-;15319:215;;;;;:::o;15541:444::-;;15724:2;15713:9;15709:18;15701:26;;15738:71;15806:1;15795:9;15791:17;15782:6;15738:71;:::i;:::-;15820:72;15888:2;15877:9;15873:18;15864:6;15820:72;:::i;:::-;15903;15971:2;15960:9;15956:18;15947:6;15903:72;:::i;:::-;15695:290;;;;;;:::o;15992:333::-;;16147:2;16136:9;16132:18;16124:26;;16161:71;16229:1;16218:9;16214:17;16205:6;16161:71;:::i;:::-;16243:72;16311:2;16300:9;16296:18;16287:6;16243:72;:::i;:::-;16118:207;;;;;:::o;16332:210::-;;16453:2;16442:9;16438:18;16430:26;;16467:65;16529:1;16518:9;16514:17;16505:6;16467:65;:::i;:::-;16424:118;;;;:::o;16549:548::-;;16756:3;16745:9;16741:19;16733:27;;16771:71;16839:1;16828:9;16824:17;16815:6;16771:71;:::i;:::-;16853:68;16917:2;16906:9;16902:18;16893:6;16853:68;:::i;:::-;16932:72;17000:2;16989:9;16985:18;16976:6;16932:72;:::i;:::-;17015;17083:2;17072:9;17068:18;17059:6;17015:72;:::i;:::-;16727:370;;;;;;;:::o;17104:310::-;;17251:2;17240:9;17236:18;17228:26;;17301:9;17295:4;17291:20;17287:1;17276:9;17272:17;17265:47;17326:78;17399:4;17390:6;17326:78;:::i;:::-;17318:86;;17222:192;;;;:::o;17421:416::-;;17621:2;17610:9;17606:18;17598:26;;17671:9;17665:4;17661:20;17657:1;17646:9;17642:17;17635:47;17696:131;17822:4;17696:131;:::i;:::-;17688:139;;17592:245;;;:::o;17844:416::-;;18044:2;18033:9;18029:18;18021:26;;18094:9;18088:4;18084:20;18080:1;18069:9;18065:17;18058:47;18119:131;18245:4;18119:131;:::i;:::-;18111:139;;18015:245;;;:::o;18267:416::-;;18467:2;18456:9;18452:18;18444:26;;18517:9;18511:4;18507:20;18503:1;18492:9;18488:17;18481:47;18542:131;18668:4;18542:131;:::i;:::-;18534:139;;18438:245;;;:::o;18690:416::-;;18890:2;18879:9;18875:18;18867:26;;18940:9;18934:4;18930:20;18926:1;18915:9;18911:17;18904:47;18965:131;19091:4;18965:131;:::i;:::-;18957:139;;18861:245;;;:::o;19113:416::-;;19313:2;19302:9;19298:18;19290:26;;19363:9;19357:4;19353:20;19349:1;19338:9;19334:17;19327:47;19388:131;19514:4;19388:131;:::i;:::-;19380:139;;19284:245;;;:::o;19536:416::-;;19736:2;19725:9;19721:18;19713:26;;19786:9;19780:4;19776:20;19772:1;19761:9;19757:17;19750:47;19811:131;19937:4;19811:131;:::i;:::-;19803:139;;19707:245;;;:::o;19959:416::-;;20159:2;20148:9;20144:18;20136:26;;20209:9;20203:4;20199:20;20195:1;20184:9;20180:17;20173:47;20234:131;20360:4;20234:131;:::i;:::-;20226:139;;20130:245;;;:::o;20382:416::-;;20582:2;20571:9;20567:18;20559:26;;20632:9;20626:4;20622:20;20618:1;20607:9;20603:17;20596:47;20657:131;20783:4;20657:131;:::i;:::-;20649:139;;20553:245;;;:::o;20805:416::-;;21005:2;20994:9;20990:18;20982:26;;21055:9;21049:4;21045:20;21041:1;21030:9;21026:17;21019:47;21080:131;21206:4;21080:131;:::i;:::-;21072:139;;20976:245;;;:::o;21228:416::-;;21428:2;21417:9;21413:18;21405:26;;21478:9;21472:4;21468:20;21464:1;21453:9;21449:17;21442:47;21503:131;21629:4;21503:131;:::i;:::-;21495:139;;21399:245;;;:::o;21651:416::-;;21851:2;21840:9;21836:18;21828:26;;21901:9;21895:4;21891:20;21887:1;21876:9;21872:17;21865:47;21926:131;22052:4;21926:131;:::i;:::-;21918:139;;21822:245;;;:::o;22074:416::-;;22274:2;22263:9;22259:18;22251:26;;22324:9;22318:4;22314:20;22310:1;22299:9;22295:17;22288:47;22349:131;22475:4;22349:131;:::i;:::-;22341:139;;22245:245;;;:::o;22497:416::-;;22697:2;22686:9;22682:18;22674:26;;22747:9;22741:4;22737:20;22733:1;22722:9;22718:17;22711:47;22772:131;22898:4;22772:131;:::i;:::-;22764:139;;22668:245;;;:::o;22920:416::-;;23120:2;23109:9;23105:18;23097:26;;23170:9;23164:4;23160:20;23156:1;23145:9;23141:17;23134:47;23195:131;23321:4;23195:131;:::i;:::-;23187:139;;23091:245;;;:::o;23343:416::-;;23543:2;23532:9;23528:18;23520:26;;23593:9;23587:4;23583:20;23579:1;23568:9;23564:17;23557:47;23618:131;23744:4;23618:131;:::i;:::-;23610:139;;23514:245;;;:::o;23766:382::-;;23949:2;23938:9;23934:18;23926:26;;23999:9;23993:4;23989:20;23985:1;23974:9;23970:17;23963:47;24024:114;24133:4;24124:6;24024:114;:::i;:::-;24016:122;;23920:228;;;;:::o;24155:218::-;;24280:2;24269:9;24265:18;24257:26;;24294:69;24360:1;24349:9;24345:17;24336:6;24294:69;:::i;:::-;24251:122;;;;:::o;24380:325::-;;24531:2;24520:9;24516:18;24508:26;;24545:69;24611:1;24600:9;24596:17;24587:6;24545:69;:::i;:::-;24625:70;24691:2;24680:9;24676:18;24667:6;24625:70;:::i;:::-;24502:203;;;;;:::o;24712:428::-;;24887:2;24876:9;24872:18;24864:26;;24901:67;24965:1;24954:9;24950:17;24941:6;24901:67;:::i;:::-;24979:72;25047:2;25036:9;25032:18;25023:6;24979:72;:::i;:::-;25062:68;25126:2;25115:9;25111:18;25102:6;25062:68;:::i;:::-;24858:282;;;;;;:::o;25147:774::-;;25411:3;25400:9;25396:19;25388:27;;25426:67;25490:1;25479:9;25475:17;25466:6;25426:67;:::i;:::-;25504:68;25568:2;25557:9;25553:18;25544:6;25504:68;:::i;:::-;25583:79;25658:2;25647:9;25643:18;25634:6;25583:79;:::i;:::-;25673:72;25741:2;25730:9;25726:18;25717:6;25673:72;:::i;:::-;25756:73;25824:3;25813:9;25809:19;25800:6;25756:73;:::i;:::-;25840:71;25906:3;25895:9;25891:19;25882:6;25840:71;:::i;:::-;25382:539;;;;;;;;;:::o;25928:752::-;;26181:3;26170:9;26166:19;26158:27;;26196:67;26260:1;26249:9;26245:17;26236:6;26196:67;:::i;:::-;26274:68;26338:2;26327:9;26323:18;26314:6;26274:68;:::i;:::-;26353;26417:2;26406:9;26402:18;26393:6;26353:68;:::i;:::-;26432:72;26500:2;26489:9;26485:18;26476:6;26432:72;:::i;:::-;26515:73;26583:3;26572:9;26568:19;26559:6;26515:73;:::i;:::-;26599:71;26665:3;26654:9;26650:19;26641:6;26599:71;:::i;:::-;26152:528;;;;;;;;;:::o;26687:151::-;;26773:3;26765:11;;26811:4;26806:3;26802:14;26794:22;;26759:79;;;:::o;26845:137::-;;26954:5;26948:12;26938:22;;26919:63;;;:::o;26989:121::-;;27082:5;27076:12;27066:22;;27047:63;;;:::o;27117:122::-;;27211:5;27205:12;27195:22;;27176:63;;;:::o;27246:108::-;;27344:4;27339:3;27335:14;27327:22;;27321:33;;;:::o;27362:168::-;;27482:6;27477:3;27470:19;27519:4;27514:3;27510:14;27495:29;;27463:67;;;;:::o;27539:144::-;;27674:3;27659:18;;27652:31;;;;:::o;27692:163::-;;27807:6;27802:3;27795:19;27844:4;27839:3;27835:14;27820:29;;27788:67;;;;:::o;27863:91::-;;27925:24;27943:5;27925:24;:::i;:::-;27914:35;;27908:46;;;:::o;27961:85::-;;28034:5;28027:13;28020:21;28009:32;;28003:43;;;:::o;28053:72::-;;28115:5;28104:16;;28098:27;;;:::o;28132:121::-;;28205:42;28198:5;28194:54;28183:65;;28177:76;;;:::o;28260:72::-;;28322:5;28311:16;;28305:27;;;:::o;28339:88::-;;28411:10;28404:5;28400:22;28389:33;;28383:44;;;:::o;28434:81::-;;28505:4;28498:5;28494:16;28483:27;;28477:38;;;:::o;28522:129::-;;28609:37;28640:5;28609:37;:::i;:::-;28596:50;;28590:61;;;:::o;28658:113::-;;28744:22;28760:5;28744:22;:::i;:::-;28731:35;;28725:46;;;:::o;28778:121::-;;28857:37;28888:5;28857:37;:::i;:::-;28844:50;;28838:61;;;:::o;28906:108::-;;28985:24;29003:5;28985:24;:::i;:::-;28972:37;;28966:48;;;:::o;29022:268::-;29087:1;29094:101;29108:6;29105:1;29102:13;29094:101;;;29184:1;29179:3;29175:11;29169:18;29165:1;29160:3;29156:11;29149:39;29130:2;29127:1;29123:10;29118:15;;29094:101;;;29210:6;29207:1;29204:13;29201:2;;;29275:1;29266:6;29261:3;29257:16;29250:27;29201:2;29071:219;;;;:::o;29298:74::-;;29362:5;29351:16;;29345:27;;;:::o;29379:88::-;;29441:21;29456:5;29441:21;:::i;:::-;29430:32;;29424:43;;;:::o;29474:97::-;;29562:2;29558:7;29553:2;29546:5;29542:14;29538:28;29528:38;;29522:49;;;:::o;29579:96::-;;29659:5;29654:3;29650:15;29628:37;;29622:53;;;:::o;29683:117::-;29752:24;29770:5;29752:24;:::i;:::-;29745:5;29742:35;29732:2;;29791:1;29788;29781:12;29732:2;29726:74;:::o;29807:111::-;29873:21;29888:5;29873:21;:::i;:::-;29866:5;29863:32;29853:2;;29909:1;29906;29899:12;29853:2;29847:71;:::o;29925:117::-;29994:24;30012:5;29994:24;:::i;:::-;29987:5;29984:35;29974:2;;30033:1;30030;30023:12;29974:2;29968:74;:::o;30049:117::-;30118:24;30136:5;30118:24;:::i;:::-;30111:5;30108:35;30098:2;;30157:1;30154;30147:12;30098:2;30092:74;:::o;30173:115::-;30241:23;30258:5;30241:23;:::i;:::-;30234:5;30231:34;30221:2;;30279:1;30276;30269:12;30221:2;30215:73;:::o;30295:113::-;30362:22;30378:5;30362:22;:::i;:::-;30355:5;30352:33;30342:2;;30399:1;30396;30389:12;30342:2;30336:72;:::o", + "source": "// contracts/Wormhole.sol\n// SPDX-License-Identifier: Apache 2\n\n// TODO(hendrik): switch-over feature\n\npragma solidity ^0.6.0;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport \"./BytesLib.sol\";\nimport \"./WrappedAsset.sol\";\n\ncontract Wormhole is ReentrancyGuard {\n using SafeERC20 for IERC20;\n using BytesLib for bytes;\n using SafeMath for uint256;\n\n // Address of the Wrapped asset template\n address public wrappedAssetMaster;\n\n // Chain ID of Ethereum\n uint8 CHAIN_ID = 2;\n\n // Address of the official WETH contract\n address constant WETHAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\n\n struct GuardianSet {\n address[] keys;\n uint32 expiration_time;\n }\n\n event LogGuardianSetChanged(\n uint32 oldGuardianIndex,\n uint32 newGuardianIndex\n );\n\n event LogTokensLocked(\n uint8 target_chain,\n uint8 token_chain,\n uint8 token_decimals,\n bytes32 indexed token,\n bytes32 indexed sender,\n bytes32 recipient,\n uint256 amount,\n uint32 nonce\n );\n\n // Mapping of guardian_set_index => guardian set\n mapping(uint32 => GuardianSet) public guardian_sets;\n // Current active guardian set\n uint32 public guardian_set_index;\n\n // Period for which a guardian set stays active after it has been replaced\n uint32 public guardian_set_expirity;\n\n // Mapping of already consumedVAAs\n mapping(bytes32 => bool) public consumedVAAs;\n\n // Mapping of wrapped asset ERC20 contracts\n mapping(bytes32 => address) public wrappedAssets;\n mapping(address => bool) public isWrappedAsset;\n\n constructor(GuardianSet memory initial_guardian_set, address wrapped_asset_master, uint32 _guardian_set_expirity) public {\n guardian_sets[0] = initial_guardian_set;\n // Explicitly set for doc purposes\n guardian_set_index = 0;\n guardian_set_expirity = _guardian_set_expirity;\n\n wrappedAssetMaster = wrapped_asset_master;\n }\n\n function getGuardianSet(uint32 idx) view public returns (GuardianSet memory gs) {\n return guardian_sets[idx];\n }\n\n function submitVAA(\n bytes calldata vaa\n ) public nonReentrant {\n uint8 version = vaa.toUint8(0);\n require(version == 1, \"VAA version incompatible\");\n\n // Load 4 bytes starting from index 1\n uint32 vaa_guardian_set_index = vaa.toUint32(1);\n\n uint256 len_signers = vaa.toUint8(5);\n uint offset = 6 + 66 * len_signers;\n\n // Load 4 bytes timestamp\n //uint32 timestamp = vaa.toUint32(offset);\n\n // Hash the body\n bytes32 hash = keccak256(vaa.slice(offset, vaa.length - offset));\n require(!consumedVAAs[hash], \"VAA was already executed\");\n\n GuardianSet memory guardian_set = guardian_sets[vaa_guardian_set_index];\n require(guardian_set.expiration_time == 0 || guardian_set.expiration_time > block.timestamp, \"guardian set has expired\");\n require(((guardian_set.keys.length / 4) * 3) + 1 <= len_signers, \"no quorum\");\n\n for (uint i = 0; i < len_signers; i++) {\n uint8 index = vaa.toUint8(6 + i * 66);\n bytes32 r = vaa.toBytes32(7 + i * 66);\n bytes32 s = vaa.toBytes32(39 + i * 66);\n uint8 v = vaa.toUint8(71 + i * 66);\n v += 27;\n require(ecrecover(hash, v, r, s) == guardian_set.keys[index], \"VAA signature invalid\");\n }\n\n uint8 action = vaa.toUint8(offset + 4);\n bytes memory payload = vaa.slice(offset + 5, vaa.length - (offset + 5));\n\n // Process VAA\n if (action == 0x01) {\n require(vaa_guardian_set_index == guardian_set_index, \"only the current guardian set can change the guardian set\");\n vaaUpdateGuardianSet(payload);\n } else if (action == 0x10) {\n vaaTransfer(payload);\n } else {\n revert(\"invalid VAA action\");\n }\n\n // Set the VAA as consumed\n consumedVAAs[hash] = true;\n }\n\n function vaaUpdateGuardianSet(bytes memory data) private {\n uint32 new_guardian_set_index = data.toUint32(0);\n uint8 len = data.toUint8(4);\n\n address[] memory new_guardians = new address[](len);\n for (uint i = 0; i < len; i++) {\n address addr = data.toAddress(5 + i * 20);\n new_guardians[i] = addr;\n }\n\n uint32 old_guardian_set_index = guardian_set_index;\n guardian_set_index = new_guardian_set_index;\n\n GuardianSet memory new_guardian_set = GuardianSet(new_guardians, 0);\n guardian_sets[guardian_set_index] = new_guardian_set;\n guardian_sets[old_guardian_set_index].expiration_time = uint32(block.timestamp) + guardian_set_expirity;\n\n emit LogGuardianSetChanged(old_guardian_set_index, guardian_set_index);\n }\n\n function vaaTransfer(bytes memory data) private {\n //uint32 nonce = data.toUint64(0);\n uint8 source_chain = data.toUint8(4);\n\n uint8 target_chain = data.toUint8(5);\n //bytes32 source_address = data.toBytes32(6);\n //bytes32 target_address = data.toBytes32(38);\n address target_address = data.toAddress(38 + 12);\n\n uint8 token_chain = data.toUint8(70);\n //bytes32 token_address = data.toBytes32(71);\n uint256 amount = data.toUint256(104);\n\n require(source_chain != target_chain, \"same chain transfers are not supported\");\n require(target_chain == CHAIN_ID, \"transfer must be incoming\");\n\n if (token_chain != CHAIN_ID) {\n bytes32 token_address = data.toBytes32(71);\n bytes32 asset_id = keccak256(abi.encodePacked(token_chain, token_address));\n\n // if yes: mint to address\n // if no: create and mint\n address wrapped_asset = wrappedAssets[asset_id];\n if (wrapped_asset == address(0)) {\n uint8 asset_decimals = data.toUint8(103);\n wrapped_asset = deployWrappedAsset(asset_id, token_chain, token_address, asset_decimals);\n }\n\n WrappedAsset(wrapped_asset).mint(target_address, amount);\n } else {\n address token_address = data.toAddress(71 + 12);\n\n IERC20(token_address).safeTransfer(target_address, amount);\n }\n }\n\n function deployWrappedAsset(bytes32 seed, uint8 token_chain, bytes32 token_address, uint8 decimals) private returns (address asset){\n // Taken from https://github.com/OpenZeppelin/openzeppelin-sdk/blob/master/packages/lib/contracts/upgradeability/ProxyFactory.sol\n // Licensed under MIT\n bytes20 targetBytes = bytes20(wrappedAssetMaster);\n assembly {\n let clone := mload(0x40)\n mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(clone, 0x14), targetBytes)\n mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n asset := create2(0, clone, 0x37, seed)\n }\n\n // Call initializer\n WrappedAsset(asset).initialize(token_chain, token_address, decimals);\n\n // Store address\n wrappedAssets[seed] = asset;\n isWrappedAsset[asset] = true;\n }\n\n function lockAssets(\n address asset,\n uint256 amount,\n bytes32 recipient,\n uint8 target_chain,\n uint32 nonce\n ) public nonReentrant {\n require(amount != 0, \"amount must not be 0\");\n\n uint8 asset_chain = CHAIN_ID;\n bytes32 asset_address;\n if (isWrappedAsset[asset]) {\n WrappedAsset(asset).burn(msg.sender, amount);\n asset_chain = WrappedAsset(asset).assetChain();\n asset_address = WrappedAsset(asset).assetAddress();\n } else {\n uint256 balanceBefore = IERC20(asset).balanceOf(address(this));\n IERC20(asset).safeTransferFrom(msg.sender, address(this), amount);\n uint256 balanceAfter = IERC20(asset).balanceOf(address(this));\n\n // The amount that was transferred in is the delta between balance before and after the transfer.\n // This is to properly handle tokens that charge a fee on transfer.\n amount = balanceAfter.sub(balanceBefore);\n asset_address = bytes32(uint256(asset));\n }\n\n emit LogTokensLocked(target_chain, asset_chain, ERC20(asset).decimals(), asset_address, bytes32(uint256(msg.sender)), recipient, amount, nonce);\n }\n\n function lockETH(\n bytes32 recipient,\n uint8 target_chain,\n uint32 nonce\n ) public payable nonReentrant {\n require(msg.value != 0, \"amount must not be 0\");\n\n // Wrap tx value in WETH\n WETH(WETHAddress).deposit{value : msg.value}();\n\n // Log deposit of WETH\n emit LogTokensLocked(target_chain, CHAIN_ID, 18, bytes32(uint256(WETHAddress)), bytes32(uint256(msg.sender)), recipient, msg.value, nonce);\n }\n\n\nfallback() external payable {revert(\"please use lockETH to transfer ETH to Solana\");}\nreceive() external payable {revert(\"please use lockETH to transfer ETH to Solana\");}\n}\n\n\ninterface WETH is IERC20 {\nfunction deposit() external payable;\n\nfunction withdraw(uint256 amount) external;\n}\n", "sourcePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol", "ast": { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol", "exportedSymbols": { "WETH": [ - 1181 + 1186 ], "Wormhole": [ - 1170 + 1175 ] }, - "id": 1182, + "id": 1187, "license": "Apache 2", "nodeType": "SourceUnit", "nodes": [ @@ -350,68 +375,79 @@ "src": "127:33:1" }, { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol", "id": 337, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2023, - "src": "162:56:1", + "scope": 1187, + "sourceUnit": 2459, + "src": "162:55:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "id": 338, + "nodeType": "ImportDirective", + "scope": 1187, + "sourceUnit": 2537, + "src": "218:56:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol", "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol", - "id": 338, + "id": 339, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2236, - "src": "219:59:1", + "scope": 1187, + "sourceUnit": 2750, + "src": "275:59:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol", "file": "@openzeppelin/contracts/math/SafeMath.sol", - "id": 339, + "id": 340, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 1945, - "src": "279:51:1", + "scope": 1187, + "sourceUnit": 1952, + "src": "335:51:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "id": 340, + "id": 341, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2480, - "src": "331:59:1", + "scope": 1187, + "sourceUnit": 2994, + "src": "387:59:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/BytesLib.sol", "file": "./BytesLib.sol", - "id": 341, + "id": 342, "nodeType": "ImportDirective", - "scope": 1182, + "scope": 1187, "sourceUnit": 334, - "src": "391:24:1", + "src": "447:24:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/WrappedAsset.sol", "file": "./WrappedAsset.sol", - "id": 342, + "id": 343, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 1726, - "src": "416:28:1", + "scope": 1187, + "sourceUnit": 1733, + "src": "472:28:1", "symbolAliases": [], "unitAlias": "" }, @@ -422,85 +458,85 @@ "arguments": null, "baseName": { "contractScope": null, - "id": 343, + "id": 344, "name": "ReentrancyGuard", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2479, - "src": "467:15:1", + "referencedDeclaration": 2993, + "src": "523:15:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ReentrancyGuard_$2479", + "typeIdentifier": "t_contract$_ReentrancyGuard_$2993", "typeString": "contract ReentrancyGuard" } }, - "id": 344, + "id": 345, "nodeType": "InheritanceSpecifier", - "src": "467:15:1" + "src": "523:15:1" } ], "contractDependencies": [ - 2479 + 2993 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1170, + "id": 1175, "linearizedBaseContracts": [ - 1170, - 2479 + 1175, + 2993 ], "name": "Wormhole", "nodeType": "ContractDefinition", "nodes": [ { - "id": 347, + "id": 348, "libraryName": { "contractScope": null, - "id": 345, + "id": 346, "name": "SafeERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2235, - "src": "495:9:1", + "referencedDeclaration": 2749, + "src": "551:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$2235", + "typeIdentifier": "t_contract$_SafeERC20_$2749", "typeString": "library SafeERC20" } }, "nodeType": "UsingForDirective", - "src": "489:27:1", + "src": "545:27:1", "typeName": { "contractScope": null, - "id": 346, + "id": 347, "name": "IERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2022, - "src": "509:6:1", + "referencedDeclaration": 2536, + "src": "565:6:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } } }, { - "id": 350, + "id": 351, "libraryName": { "contractScope": null, - "id": 348, + "id": 349, "name": "BytesLib", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 333, - "src": "527:8:1", + "src": "583:8:1", "typeDescriptions": { "typeIdentifier": "t_contract$_BytesLib_$333", "typeString": "library BytesLib" } }, "nodeType": "UsingForDirective", - "src": "521:25:1", + "src": "577:25:1", "typeName": { - "id": 349, + "id": 350, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "540:5:1", + "src": "596:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -508,26 +544,26 @@ } }, { - "id": 353, + "id": 354, "libraryName": { "contractScope": null, - "id": 351, + "id": 352, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1944, - "src": "557:8:1", + "referencedDeclaration": 1951, + "src": "613:8:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1944", + "typeIdentifier": "t_contract$_SafeMath_$1951", "typeString": "library SafeMath" } }, "nodeType": "UsingForDirective", - "src": "551:27:1", + "src": "607:27:1", "typeName": { - "id": 352, + "id": 353, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "570:7:1", + "src": "626:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -537,13 +573,13 @@ { "constant": false, "functionSelector": "99da1d3c", - "id": 355, + "id": 356, "mutability": "mutable", "name": "wrappedAssetMaster", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "629:33:1", + "scope": 1175, + "src": "685:33:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -551,10 +587,10 @@ "typeString": "address" }, "typeName": { - "id": 354, + "id": 355, "name": "address", "nodeType": "ElementaryTypeName", - "src": "629:7:1", + "src": "685:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -566,13 +602,13 @@ }, { "constant": false, - "id": 358, + "id": 359, "mutability": "mutable", "name": "CHAIN_ID", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "697:18:1", + "scope": 1175, + "src": "753:18:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -580,10 +616,10 @@ "typeString": "uint8" }, "typeName": { - "id": 356, + "id": 357, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "697:5:1", + "src": "753:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -592,14 +628,14 @@ "value": { "argumentTypes": null, "hexValue": "32", - "id": 357, + "id": 358, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "714:1:1", + "src": "770:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -611,13 +647,13 @@ }, { "constant": true, - "id": 361, + "id": 362, "mutability": "constant", "name": "WETHAddress", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "767:73:1", + "scope": 1175, + "src": "823:73:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -625,10 +661,10 @@ "typeString": "address" }, "typeName": { - "id": 359, + "id": 360, "name": "address", "nodeType": "ElementaryTypeName", - "src": "767:7:1", + "src": "823:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -638,14 +674,14 @@ "value": { "argumentTypes": null, "hexValue": "307843303261614133396232323346453844304130653543344632376541443930383343373536436332", - "id": 360, + "id": 361, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "798:42:1", + "src": "854:42:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -657,17 +693,17 @@ }, { "canonicalName": "Wormhole.GuardianSet", - "id": 367, + "id": 368, "members": [ { "constant": false, - "id": 364, + "id": 365, "mutability": "mutable", "name": "keys", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 367, - "src": "876:14:1", + "scope": 368, + "src": "932:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -676,20 +712,20 @@ }, "typeName": { "baseType": { - "id": 362, + "id": 363, "name": "address", "nodeType": "ElementaryTypeName", - "src": "876:7:1", + "src": "932:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 363, + "id": 364, "length": null, "nodeType": "ArrayTypeName", - "src": "876:9:1", + "src": "932:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -700,13 +736,13 @@ }, { "constant": false, - "id": 366, + "id": 367, "mutability": "mutable", "name": "expiration_time", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 367, - "src": "900:22:1", + "scope": 368, + "src": "956:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -714,10 +750,10 @@ "typeString": "uint32" }, "typeName": { - "id": 365, + "id": 366, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "900:6:1", + "src": "956:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -729,30 +765,30 @@ ], "name": "GuardianSet", "nodeType": "StructDefinition", - "scope": 1170, - "src": "847:82:1", + "scope": 1175, + "src": "903:82:1", "visibility": "public" }, { "anonymous": false, "documentation": null, - "id": 373, + "id": 374, "name": "LogGuardianSetChanged", "nodeType": "EventDefinition", "parameters": { - "id": 372, + "id": 373, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 369, + "id": 370, "indexed": false, "mutability": "mutable", "name": "oldGuardianIndex", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 373, - "src": "972:23:1", + "scope": 374, + "src": "1028:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -760,10 +796,10 @@ "typeString": "uint32" }, "typeName": { - "id": 368, + "id": 369, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "972:6:1", + "src": "1028:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -774,14 +810,14 @@ }, { "constant": false, - "id": 371, + "id": 372, "indexed": false, "mutability": "mutable", "name": "newGuardianIndex", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 373, - "src": "1005:23:1", + "scope": 374, + "src": "1061:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -789,10 +825,10 @@ "typeString": "uint32" }, "typeName": { - "id": 370, + "id": 371, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1005:6:1", + "src": "1061:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -802,30 +838,30 @@ "visibility": "internal" } ], - "src": "962:72:1" + "src": "1018:72:1" }, - "src": "935:100:1" + "src": "991:100:1" }, { "anonymous": false, "documentation": null, - "id": 389, + "id": 392, "name": "LogTokensLocked", "nodeType": "EventDefinition", "parameters": { - "id": 388, + "id": 391, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 375, + "id": 376, "indexed": false, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1072:18:1", + "scope": 392, + "src": "1128:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -833,10 +869,10 @@ "typeString": "uint8" }, "typeName": { - "id": 374, + "id": 375, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "1072:5:1", + "src": "1128:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -847,14 +883,14 @@ }, { "constant": false, - "id": 377, + "id": 378, "indexed": false, "mutability": "mutable", "name": "token_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1100:17:1", + "scope": 392, + "src": "1156:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -862,10 +898,10 @@ "typeString": "uint8" }, "typeName": { - "id": 376, + "id": 377, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "1100:5:1", + "src": "1156:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -876,14 +912,43 @@ }, { "constant": false, - "id": 379, + "id": 380, + "indexed": false, + "mutability": "mutable", + "name": "token_decimals", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 392, + "src": "1183:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 379, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1183:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 382, "indexed": true, "mutability": "mutable", "name": "token", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1127:21:1", + "scope": 392, + "src": "1213:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -891,10 +956,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 378, + "id": 381, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1127:7:1", + "src": "1213:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -905,14 +970,14 @@ }, { "constant": false, - "id": 381, + "id": 384, "indexed": true, "mutability": "mutable", "name": "sender", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1158:22:1", + "scope": 392, + "src": "1244:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -920,10 +985,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 380, + "id": 383, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1158:7:1", + "src": "1244:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -934,14 +999,14 @@ }, { "constant": false, - "id": 383, + "id": 386, "indexed": false, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1190:17:1", + "scope": 392, + "src": "1276:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -949,10 +1014,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 382, + "id": 385, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1190:7:1", + "src": "1276:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -963,14 +1028,14 @@ }, { "constant": false, - "id": 385, + "id": 388, "indexed": false, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1217:14:1", + "scope": 392, + "src": "1303:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -978,10 +1043,10 @@ "typeString": "uint256" }, "typeName": { - "id": 384, + "id": 387, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1217:7:1", + "src": "1303:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -992,14 +1057,14 @@ }, { "constant": false, - "id": 387, + "id": 390, "indexed": false, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1241:12:1", + "scope": 392, + "src": "1327:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1007,10 +1072,10 @@ "typeString": "uint32" }, "typeName": { - "id": 386, + "id": 389, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1241:6:1", + "src": "1327:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1020,53 +1085,53 @@ "visibility": "internal" } ], - "src": "1062:197:1" + "src": "1118:227:1" }, - "src": "1041:219:1" + "src": "1097:249:1" }, { "constant": false, "functionSelector": "42b0aefa", - "id": 393, + "id": 396, "mutability": "mutable", "name": "guardian_sets", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1319:51:1", + "scope": 1175, + "src": "1405:51:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet)" }, "typeName": { - "id": 392, + "id": 395, "keyType": { - "id": 390, + "id": 393, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1327:6:1", + "src": "1413:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, "nodeType": "Mapping", - "src": "1319:30:1", + "src": "1405:30:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet)" }, "valueType": { "contractScope": null, - "id": 391, + "id": 394, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "1337:11:1", + "referencedDeclaration": 368, + "src": "1423:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } } @@ -1077,13 +1142,13 @@ { "constant": false, "functionSelector": "822d82b3", - "id": 395, + "id": 398, "mutability": "mutable", "name": "guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1411:32:1", + "scope": 1175, + "src": "1497:32:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -1091,10 +1156,10 @@ "typeString": "uint32" }, "typeName": { - "id": 394, + "id": 397, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1411:6:1", + "src": "1497:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1105,14 +1170,14 @@ }, { "constant": false, - "functionSelector": "7f04d9e6", - "id": 397, + "functionSelector": "4db47840", + "id": 400, "mutability": "mutable", - "name": "vaa_expiry", + "name": "guardian_set_expirity", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1501:24:1", + "scope": 1175, + "src": "1615:35:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -1120,10 +1185,10 @@ "typeString": "uint32" }, "typeName": { - "id": 396, + "id": 399, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1501:6:1", + "src": "1615:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1134,13 +1199,14 @@ }, { "constant": false, - "id": 401, + "functionSelector": "a31fe409", + "id": 404, "mutability": "mutable", "name": "consumedVAAs", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1571:37:1", + "scope": 1175, + "src": "1696:44:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -1148,28 +1214,28 @@ "typeString": "mapping(bytes32 => bool)" }, "typeName": { - "id": 400, + "id": 403, "keyType": { - "id": 398, + "id": 401, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1579:7:1", + "src": "1704:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1571:24:1", + "src": "1696:24:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" }, "valueType": { - "id": 399, + "id": 402, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "1590:4:1", + "src": "1715:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1177,18 +1243,18 @@ } }, "value": null, - "visibility": "internal" + "visibility": "public" }, { "constant": false, "functionSelector": "b6694c2a", - "id": 405, + "id": 408, "mutability": "mutable", "name": "wrappedAssets", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1663:48:1", + "scope": 1175, + "src": "1795:48:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -1196,28 +1262,28 @@ "typeString": "mapping(bytes32 => address)" }, "typeName": { - "id": 404, + "id": 407, "keyType": { - "id": 402, + "id": 405, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1671:7:1", + "src": "1803:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1663:27:1", + "src": "1795:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" }, "valueType": { - "id": 403, + "id": 406, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1682:7:1", + "src": "1814:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1231,13 +1297,13 @@ { "constant": false, "functionSelector": "1a2be4da", - "id": 409, + "id": 412, "mutability": "mutable", "name": "isWrappedAsset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1717:46:1", + "scope": 1175, + "src": "1849:46:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -1245,28 +1311,28 @@ "typeString": "mapping(address => bool)" }, "typeName": { - "id": 408, + "id": 411, "keyType": { - "id": 406, + "id": 409, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1725:7:1", + "src": "1857:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", - "src": "1717:24:1", + "src": "1849:24:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" }, "valueType": { - "id": 407, + "id": 410, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "1736:4:1", + "src": "1868:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1278,14 +1344,14 @@ }, { "body": { - "id": 436, + "id": 439, "nodeType": "Block", - "src": "1880:217:1", + "src": "2023:239:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 422, + "id": 425, "isConstant": false, "isLValue": false, "isPure": false, @@ -1294,29 +1360,29 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 418, + "id": 421, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "1890:13:1", + "referencedDeclaration": 396, + "src": "2033:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 420, + "id": 423, "indexExpression": { "argumentTypes": null, "hexValue": "30", - "id": 419, + "id": 422, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "1904:1:1", + "src": "2047:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -1329,9 +1395,9 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "1890:16:1", + "src": "2033:16:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, @@ -1339,43 +1405,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 421, + "id": 424, "name": "initial_guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 411, - "src": "1909:20:1", + "referencedDeclaration": 414, + "src": "2052:20:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "src": "1890:39:1", + "src": "2033:39:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 423, + "id": 426, "nodeType": "ExpressionStatement", - "src": "1890:39:1" + "src": "2033:39:1" }, { "expression": { "argumentTypes": null, - "id": 426, + "id": 429, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 424, + "id": 427, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "1982:18:1", + "referencedDeclaration": 398, + "src": "2125:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1386,14 +1452,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "30", - "id": 425, + "id": 428, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2003:1:1", + "src": "2146:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -1401,32 +1467,32 @@ }, "value": "0" }, - "src": "1982:22:1", + "src": "2125:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 427, + "id": 430, "nodeType": "ExpressionStatement", - "src": "1982:22:1" + "src": "2125:22:1" }, { "expression": { "argumentTypes": null, - "id": 430, + "id": 433, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 428, - "name": "vaa_expiry", + "id": 431, + "name": "guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "2014:10:1", + "referencedDeclaration": 400, + "src": "2157:21:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1436,43 +1502,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 429, - "name": "_vaa_expiry", + "id": 432, + "name": "_guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 415, - "src": "2027:11:1", + "referencedDeclaration": 418, + "src": "2181:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "2014:24:1", + "src": "2157:46:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 431, + "id": 434, "nodeType": "ExpressionStatement", - "src": "2014:24:1" + "src": "2157:46:1" }, { "expression": { "argumentTypes": null, - "id": 434, + "id": 437, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 432, + "id": 435, "name": "wrappedAssetMaster", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 355, - "src": "2049:18:1", + "referencedDeclaration": 356, + "src": "2214:18:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -1482,31 +1548,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 433, + "id": 436, "name": "wrapped_asset_master", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 413, - "src": "2070:20:1", + "referencedDeclaration": 416, + "src": "2235:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "2049:41:1", + "src": "2214:41:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 435, + "id": 438, "nodeType": "ExpressionStatement", - "src": "2049:41:1" + "src": "2214:41:1" } ] }, "documentation": null, - "id": 437, + "id": 440, "implemented": true, "kind": "constructor", "modifiers": [], @@ -1514,33 +1580,33 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 416, + "id": 419, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 411, + "id": 414, "mutability": "mutable", "name": "initial_guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1782:39:1", + "scope": 440, + "src": "1914:39:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 410, + "id": 413, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "1782:11:1", + "referencedDeclaration": 368, + "src": "1914:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -1549,13 +1615,13 @@ }, { "constant": false, - "id": 413, + "id": 416, "mutability": "mutable", "name": "wrapped_asset_master", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1823:28:1", + "scope": 440, + "src": "1955:28:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1563,10 +1629,10 @@ "typeString": "address" }, "typeName": { - "id": 412, + "id": 415, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1823:7:1", + "src": "1955:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1578,13 +1644,13 @@ }, { "constant": false, - "id": 415, + "id": 418, "mutability": "mutable", - "name": "_vaa_expiry", + "name": "_guardian_set_expirity", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1853:18:1", + "scope": 440, + "src": "1985:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1592,10 +1658,10 @@ "typeString": "uint32" }, "typeName": { - "id": 414, + "id": 417, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1853:6:1", + "src": "1985:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1605,51 +1671,51 @@ "visibility": "internal" } ], - "src": "1781:91:1" + "src": "1913:102:1" }, "returnParameters": { - "id": 417, + "id": 420, "nodeType": "ParameterList", "parameters": [], - "src": "1880:0:1" + "src": "2023:0:1" }, - "scope": 1170, - "src": "1770:327:1", + "scope": 1175, + "src": "1902:360:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 448, + "id": 451, "nodeType": "Block", - "src": "2183:42:1", + "src": "2348:42:1", "statements": [ { "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 444, + "id": 447, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "2200:13:1", + "referencedDeclaration": 396, + "src": "2365:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 446, + "id": 449, "indexExpression": { "argumentTypes": null, - "id": 445, + "id": 448, "name": "idx", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 439, - "src": "2214:3:1", + "referencedDeclaration": 442, + "src": "2379:3:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1660,22 +1726,22 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "2200:18:1", + "src": "2365:18:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "functionReturnParameters": 443, - "id": 447, + "functionReturnParameters": 446, + "id": 450, "nodeType": "Return", - "src": "2193:25:1" + "src": "2358:25:1" } ] }, "documentation": null, "functionSelector": "f951975a", - "id": 449, + "id": 452, "implemented": true, "kind": "function", "modifiers": [], @@ -1683,18 +1749,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 440, + "id": 443, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 439, + "id": 442, "mutability": "mutable", "name": "idx", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 449, - "src": "2127:10:1", + "scope": 452, + "src": "2292:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1702,10 +1768,10 @@ "typeString": "uint32" }, "typeName": { - "id": 438, + "id": 441, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "2127:6:1", + "src": "2292:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -1715,36 +1781,36 @@ "visibility": "internal" } ], - "src": "2126:12:1" + "src": "2291:12:1" }, "returnParameters": { - "id": 443, + "id": 446, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 442, + "id": 445, "mutability": "mutable", "name": "gs", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 449, - "src": "2160:21:1", + "scope": 452, + "src": "2325:21:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 441, + "id": 444, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "2160:11:1", + "referencedDeclaration": 368, + "src": "2325:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -1752,34 +1818,34 @@ "visibility": "internal" } ], - "src": "2159:23:1" + "src": "2324:23:1" }, - "scope": 1170, - "src": "2103:122:1", + "scope": 1175, + "src": "2268:122:1", "stateMutability": "view", "virtual": false, "visibility": "public" }, { "body": { - "id": 701, + "id": 689, "nodeType": "Block", - "src": "2304:1920:1", + "src": "2469:1801:1", "statements": [ { "assignments": [ - 457 + 460 ], "declarations": [ { "constant": false, - "id": 457, + "id": 460, "mutability": "mutable", "name": "version", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2314:13:1", + "scope": 689, + "src": "2479:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1787,10 +1853,10 @@ "typeString": "uint8" }, "typeName": { - "id": 456, + "id": 459, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "2314:5:1", + "src": "2479:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -1800,21 +1866,21 @@ "visibility": "internal" } ], - "id": 462, + "id": 465, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", - "id": 460, + "id": 463, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2342:1:1", + "src": "2507:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -1832,18 +1898,18 @@ ], "expression": { "argumentTypes": null, - "id": 458, + "id": 461, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2330:3:1", + "referencedDeclaration": 454, + "src": "2495:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 459, + "id": 462, "isConstant": false, "isLValue": false, "isPure": false, @@ -1851,13 +1917,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "2330:11:1", + "src": "2495:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 461, + "id": 464, "isConstant": false, "isLValue": false, "isPure": false, @@ -1865,7 +1931,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2330:14:1", + "src": "2495:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -1873,7 +1939,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2314:30:1" + "src": "2479:30:1" }, { "expression": { @@ -1885,19 +1951,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 466, + "id": 469, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 464, + "id": 467, "name": "version", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 457, - "src": "2362:7:1", + "referencedDeclaration": 460, + "src": "2527:7:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -1908,14 +1974,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 465, + "id": 468, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2373:1:1", + "src": "2538:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -1923,7 +1989,7 @@ }, "value": "1" }, - "src": "2362:12:1", + "src": "2527:12:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -1932,14 +1998,14 @@ { "argumentTypes": null, "hexValue": "5641412076657273696f6e20696e636f6d70617469626c65", - "id": 467, + "id": 470, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "2376:26:1", + "src": "2541:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_6f94df49f756ee0c4605e9c5793f0e851f28a084ddaba07c34c32ea93810236a", @@ -1959,7 +2025,7 @@ "typeString": "literal_string \"VAA version incompatible\"" } ], - "id": 463, + "id": 466, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -1967,13 +2033,13 @@ -18 ], "referencedDeclaration": -18, - "src": "2354:7:1", + "src": "2519:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 468, + "id": 471, "isConstant": false, "isLValue": false, "isPure": false, @@ -1981,31 +2047,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2354:49:1", + "src": "2519:49:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 469, + "id": 472, "nodeType": "ExpressionStatement", - "src": "2354:49:1" + "src": "2519:49:1" }, { "assignments": [ - 471 + 474 ], "declarations": [ { "constant": false, - "id": 471, + "id": 474, "mutability": "mutable", "name": "vaa_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2460:29:1", + "scope": 689, + "src": "2625:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2013,10 +2079,10 @@ "typeString": "uint32" }, "typeName": { - "id": 470, + "id": 473, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "2460:6:1", + "src": "2625:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -2026,21 +2092,21 @@ "visibility": "internal" } ], - "id": 476, + "id": 479, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", - "id": 474, + "id": 477, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2505:1:1", + "src": "2670:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -2058,18 +2124,18 @@ ], "expression": { "argumentTypes": null, - "id": 472, + "id": 475, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2492:3:1", + "referencedDeclaration": 454, + "src": "2657:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 473, + "id": 476, "isConstant": false, "isLValue": false, "isPure": false, @@ -2077,13 +2143,13 @@ "memberName": "toUint32", "nodeType": "MemberAccess", "referencedDeclaration": 163, - "src": "2492:12:1", + "src": "2657:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint32)" } }, - "id": 475, + "id": 478, "isConstant": false, "isLValue": false, "isPure": false, @@ -2091,7 +2157,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2492:15:1", + "src": "2657:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -2099,22 +2165,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2460:47:1" + "src": "2625:47:1" }, { "assignments": [ - 478 + 481 ], "declarations": [ { "constant": false, - "id": 478, + "id": 481, "mutability": "mutable", "name": "len_signers", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2518:19:1", + "scope": 689, + "src": "2683:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2122,10 +2188,10 @@ "typeString": "uint256" }, "typeName": { - "id": 477, + "id": 480, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2518:7:1", + "src": "2683:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2135,21 +2201,21 @@ "visibility": "internal" } ], - "id": 483, + "id": 486, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "35", - "id": 481, + "id": 484, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2552:1:1", + "src": "2717:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -2167,18 +2233,18 @@ ], "expression": { "argumentTypes": null, - "id": 479, + "id": 482, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2540:3:1", + "referencedDeclaration": 454, + "src": "2705:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 480, + "id": 483, "isConstant": false, "isLValue": false, "isPure": false, @@ -2186,13 +2252,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "2540:11:1", + "src": "2705:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 482, + "id": 485, "isConstant": false, "isLValue": false, "isPure": false, @@ -2200,7 +2266,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2540:14:1", + "src": "2705:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -2208,22 +2274,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2518:36:1" + "src": "2683:36:1" }, { "assignments": [ - 485 + 488 ], "declarations": [ { "constant": false, - "id": 485, + "id": 488, "mutability": "mutable", "name": "offset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2564:11:1", + "scope": 689, + "src": "2729:11:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2231,10 +2297,10 @@ "typeString": "uint256" }, "typeName": { - "id": 484, + "id": 487, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "2564:4:1", + "src": "2729:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2244,14 +2310,14 @@ "visibility": "internal" } ], - "id": 491, + "id": 494, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 490, + "id": 493, "isConstant": false, "isLValue": false, "isPure": false, @@ -2259,14 +2325,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "36", - "id": 486, + "id": 489, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2578:1:1", + "src": "2743:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_6_by_1", @@ -2282,7 +2348,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 489, + "id": 492, "isConstant": false, "isLValue": false, "isPure": false, @@ -2290,14 +2356,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 487, + "id": 490, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2582:2:1", + "src": "2747:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -2309,310 +2375,46 @@ "operator": "*", "rightExpression": { "argumentTypes": null, - "id": 488, + "id": 491, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "2587:11:1", + "referencedDeclaration": 481, + "src": "2752:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2582:16:1", + "src": "2747:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2578:20:1", + "src": "2743:20:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "2564:34:1" + "src": "2729:34:1" }, { "assignments": [ - 493 + 496 ], "declarations": [ { "constant": false, - "id": 493, - "mutability": "mutable", - "name": "timestamp", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 701, - "src": "2643:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 492, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2643:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 498, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 496, - "name": "offset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2675:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 494, - "name": "vaa", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2662:3:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "toUint32", - "nodeType": "MemberAccess", - "referencedDeclaration": 163, - "src": "2662:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory,uint256) pure returns (uint32)" - } - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2662:20:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2643:39:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 500, - "name": "timestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "2747:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 501, - "name": "vaa_expiry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "2759:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "2747:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 503, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "2772:5:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2772:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2747:40:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "564141206861732065787069726564", - "id": 506, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2789:17:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_716b6a367d262f21a121968c96e61557fe9c6281596966426b955d4c8c65cb86", - "typeString": "literal_string \"VAA has expired\"" - }, - "value": "VAA has expired" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_716b6a367d262f21a121968c96e61557fe9c6281596966426b955d4c8c65cb86", - "typeString": "literal_string \"VAA has expired\"" - } - ], - "id": 499, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2739:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2739:68:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 508, - "nodeType": "ExpressionStatement", - "src": "2739:68:1" - }, - { - "assignments": [ - 510 - ], - "declarations": [ - { - "constant": false, - "id": 510, + "id": 496, "mutability": "mutable", "name": "hash", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2843:12:1", + "scope": 689, + "src": "2885:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2620,10 +2422,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 509, + "id": 495, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "2843:7:1", + "src": "2885:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -2633,7 +2435,7 @@ "visibility": "internal" } ], - "id": 521, + "id": 507, "initialValue": { "argumentTypes": null, "arguments": [ @@ -2642,12 +2444,12 @@ "arguments": [ { "argumentTypes": null, - "id": 514, + "id": 500, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2878:6:1", + "referencedDeclaration": 488, + "src": "2920:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2659,7 +2461,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 518, + "id": 504, "isConstant": false, "isLValue": false, "isPure": false, @@ -2668,18 +2470,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 515, + "id": 501, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2886:3:1", + "referencedDeclaration": 454, + "src": "2928:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 516, + "id": 502, "isConstant": false, "isLValue": false, "isPure": false, @@ -2687,7 +2489,7 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "2886:10:1", + "src": "2928:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2697,18 +2499,18 @@ "operator": "-", "rightExpression": { "argumentTypes": null, - "id": 517, + "id": 503, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2899:6:1", + "referencedDeclaration": 488, + "src": "2941:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2886:19:1", + "src": "2928:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2728,18 +2530,18 @@ ], "expression": { "argumentTypes": null, - "id": 512, + "id": 498, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2868:3:1", + "referencedDeclaration": 454, + "src": "2910:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 513, + "id": 499, "isConstant": false, "isLValue": false, "isPure": false, @@ -2747,13 +2549,13 @@ "memberName": "slice", "nodeType": "MemberAccess", "referencedDeclaration": 55, - "src": "2868:9:1", + "src": "2910:9:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)" } }, - "id": 519, + "id": 505, "isConstant": false, "isLValue": false, "isPure": false, @@ -2761,7 +2563,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2868:38:1", + "src": "2910:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -2776,18 +2578,18 @@ "typeString": "bytes memory" } ], - "id": 511, + "id": 497, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, - "src": "2858:9:1", + "src": "2900:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 520, + "id": 506, "isConstant": false, "isLValue": false, "isPure": false, @@ -2795,7 +2597,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2858:49:1", + "src": "2900:49:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -2803,7 +2605,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2843:64:1" + "src": "2885:64:1" }, { "expression": { @@ -2811,7 +2613,7 @@ "arguments": [ { "argumentTypes": null, - "id": 526, + "id": 512, "isConstant": false, "isLValue": false, "isPure": false, @@ -2819,31 +2621,31 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "2925:19:1", + "src": "2967:19:1", "subExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 523, + "id": 509, "name": "consumedVAAs", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 401, - "src": "2926:12:1", + "referencedDeclaration": 404, + "src": "2968:12:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" } }, - "id": 525, + "id": 511, "indexExpression": { "argumentTypes": null, - "id": 524, + "id": 510, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2939:4:1", + "referencedDeclaration": 496, + "src": "2981:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -2854,7 +2656,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "2926:18:1", + "src": "2968:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2868,14 +2670,14 @@ { "argumentTypes": null, "hexValue": "5641412077617320616c7265616479206578656375746564", - "id": 527, + "id": 513, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "2946:26:1", + "src": "2988:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_2c9f12104d534b328038b37a96c0a685f6c00604447c9f6b300f1a21a9a56028", @@ -2895,7 +2697,7 @@ "typeString": "literal_string \"VAA was already executed\"" } ], - "id": 522, + "id": 508, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -2903,13 +2705,13 @@ -18 ], "referencedDeclaration": -18, - "src": "2917:7:1", + "src": "2959:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 528, + "id": 514, "isConstant": false, "isLValue": false, "isPure": false, @@ -2917,46 +2719,46 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2917:56:1", + "src": "2959:56:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 529, + "id": 515, "nodeType": "ExpressionStatement", - "src": "2917:56:1" + "src": "2959:56:1" }, { "assignments": [ - 531 + 517 ], "declarations": [ { "constant": false, - "id": 531, + "id": 517, "mutability": "mutable", "name": "guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2984:31:1", + "scope": 689, + "src": "3026:31:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 530, + "id": 516, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "2984:11:1", + "referencedDeclaration": 368, + "src": "3026:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -2964,31 +2766,31 @@ "visibility": "internal" } ], - "id": 535, + "id": 521, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 532, + "id": 518, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "3018:13:1", + "referencedDeclaration": 396, + "src": "3060:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 534, + "id": 520, "indexExpression": { "argumentTypes": null, - "id": 533, + "id": 519, "name": "vaa_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 471, - "src": "3032:22:1", + "referencedDeclaration": 474, + "src": "3074:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -2999,14 +2801,14 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "3018:37:1", + "src": "3060:37:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, "nodeType": "VariableDeclarationStatement", - "src": "2984:71:1" + "src": "3026:71:1" }, { "expression": { @@ -3018,7 +2820,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 546, + "id": 532, "isConstant": false, "isLValue": false, "isPure": false, @@ -3029,7 +2831,7 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 540, + "id": 526, "isConstant": false, "isLValue": false, "isPure": false, @@ -3038,26 +2840,26 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 537, + "id": 523, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3073:12:1", + "referencedDeclaration": 517, + "src": "3115:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 538, + "id": 524, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "3073:28:1", + "referencedDeclaration": 367, + "src": "3115:28:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -3068,14 +2870,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 539, + "id": 525, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3105:1:1", + "src": "3147:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -3083,7 +2885,7 @@ }, "value": "0" }, - "src": "3073:33:1", + "src": "3115:33:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3097,7 +2899,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 545, + "id": 531, "isConstant": false, "isLValue": false, "isPure": false, @@ -3106,26 +2908,26 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 541, + "id": 527, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3110:12:1", + "referencedDeclaration": 517, + "src": "3152:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 542, + "id": 528, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "3110:28:1", + "referencedDeclaration": 367, + "src": "3152:28:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -3137,18 +2939,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 543, + "id": 529, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, - "src": "3141:5:1", + "src": "3183:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 544, + "id": 530, "isConstant": false, "isLValue": false, "isPure": false, @@ -3156,19 +2958,19 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3141:15:1", + "src": "3183:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3110:46:1", + "src": "3152:46:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "3073:83:1", + "src": "3115:83:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3177,14 +2979,14 @@ { "argumentTypes": null, "hexValue": "677561726469616e20736574206861732065787069726564", - "id": 547, + "id": 533, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3158:26:1", + "src": "3200:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_cbe80c778d9be5c7f6d0de415ae854de0cf9a58da1d3e65a9d672ad42a10aaf1", @@ -3204,7 +3006,7 @@ "typeString": "literal_string \"guardian set has expired\"" } ], - "id": 536, + "id": 522, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -3212,13 +3014,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3065:7:1", + "src": "3107:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 548, + "id": 534, "isConstant": false, "isLValue": false, "isPure": false, @@ -3226,16 +3028,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3065:120:1", + "src": "3107:120:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 549, + "id": 535, "nodeType": "ExpressionStatement", - "src": "3065:120:1" + "src": "3107:120:1" }, { "expression": { @@ -3247,7 +3049,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 561, + "id": 549, "isConstant": false, "isLValue": false, "isPure": false, @@ -3258,125 +3060,159 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 559, + "id": 547, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 557, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 555, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { + "components": [ + { "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 551, - "name": "guardian_set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3203:12:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", - "typeString": "struct Wormhole.GuardianSet memory" - } - }, - "id": 552, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "keys", - "nodeType": "MemberAccess", - "referencedDeclaration": 364, - "src": "3203:17:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" }, - "id": 553, + "id": 544, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3203:24:1", + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 537, + "name": "guardian_set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "3247:12:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", + "typeString": "struct Wormhole.GuardianSet memory" + } + }, + "id": 538, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "keys", + "nodeType": "MemberAccess", + "referencedDeclaration": 365, + "src": "3247:17:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3247:24:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "hexValue": "34", + "id": 540, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3274:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "3247:28:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 542, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3246:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "hexValue": "33", + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3279:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "3246:34:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 554, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3230:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "3203:28:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3234:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "3203:32:1", + ], + "id": 545, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3245:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3387,14 +3223,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 558, + "id": 546, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3238:1:1", + "src": "3284:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -3402,7 +3238,7 @@ }, "value": "1" }, - "src": "3203:36:1", + "src": "3245:40:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3412,18 +3248,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 560, + "id": 548, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "3243:11:1", + "referencedDeclaration": 481, + "src": "3289:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3203:51:1", + "src": "3245:55:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3432,14 +3268,14 @@ { "argumentTypes": null, "hexValue": "6e6f2071756f72756d", - "id": 562, + "id": 550, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3256:11:1", + "src": "3302:11:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b18d2210a58b70fe2b7fd0e0f29d90614b1c4f3f5d8dbb518559998f90306fcb", @@ -3459,7 +3295,7 @@ "typeString": "literal_string \"no quorum\"" } ], - "id": 550, + "id": 536, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -3467,13 +3303,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3195:7:1", + "src": "3237:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 563, + "id": 551, "isConstant": false, "isLValue": false, "isPure": false, @@ -3481,37 +3317,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3195:73:1", + "src": "3237:77:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 564, + "id": 552, "nodeType": "ExpressionStatement", - "src": "3195:73:1" + "src": "3237:77:1" }, { "body": { - "id": 638, + "id": 626, "nodeType": "Block", - "src": "3318:334:1", + "src": "3364:334:1", "statements": [ { "assignments": [ - 576 + 564 ], "declarations": [ { "constant": false, - "id": 576, + "id": 564, "mutability": "mutable", "name": "index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3332:11:1", + "scope": 626, + "src": "3378:11:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3519,10 +3355,10 @@ "typeString": "uint8" }, "typeName": { - "id": 575, + "id": 563, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3332:5:1", + "src": "3378:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -3532,7 +3368,7 @@ "visibility": "internal" } ], - "id": 585, + "id": 573, "initialValue": { "argumentTypes": null, "arguments": [ @@ -3542,7 +3378,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 583, + "id": 571, "isConstant": false, "isLValue": false, "isPure": false, @@ -3550,14 +3386,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "36", - "id": 579, + "id": 567, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3358:1:1", + "src": "3404:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_6_by_1", @@ -3573,19 +3409,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 582, + "id": 570, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 580, + "id": 568, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3362:1:1", + "referencedDeclaration": 554, + "src": "3408:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3596,14 +3432,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 581, + "id": 569, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3366:2:1", + "src": "3412:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -3611,13 +3447,13 @@ }, "value": "66" }, - "src": "3362:6:1", + "src": "3408:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3358:10:1", + "src": "3404:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3633,18 +3469,18 @@ ], "expression": { "argumentTypes": null, - "id": 577, + "id": 565, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3346:3:1", + "referencedDeclaration": 454, + "src": "3392:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 578, + "id": 566, "isConstant": false, "isLValue": false, "isPure": false, @@ -3652,13 +3488,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3346:11:1", + "src": "3392:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 584, + "id": 572, "isConstant": false, "isLValue": false, "isPure": false, @@ -3666,7 +3502,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3346:23:1", + "src": "3392:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -3674,22 +3510,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3332:37:1" + "src": "3378:37:1" }, { "assignments": [ - 587 + 575 ], "declarations": [ { "constant": false, - "id": 587, + "id": 575, "mutability": "mutable", "name": "r", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3383:9:1", + "scope": 626, + "src": "3429:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3697,10 +3533,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 586, + "id": 574, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3383:7:1", + "src": "3429:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -3710,7 +3546,7 @@ "visibility": "internal" } ], - "id": 596, + "id": 584, "initialValue": { "argumentTypes": null, "arguments": [ @@ -3720,7 +3556,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 594, + "id": 582, "isConstant": false, "isLValue": false, "isPure": false, @@ -3728,14 +3564,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "37", - "id": 590, + "id": 578, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3409:1:1", + "src": "3455:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_7_by_1", @@ -3751,19 +3587,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 593, + "id": 581, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 591, + "id": 579, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3413:1:1", + "referencedDeclaration": 554, + "src": "3459:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3774,14 +3610,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 592, + "id": 580, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3417:2:1", + "src": "3463:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -3789,13 +3625,13 @@ }, "value": "66" }, - "src": "3413:6:1", + "src": "3459:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3409:10:1", + "src": "3455:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3811,18 +3647,18 @@ ], "expression": { "argumentTypes": null, - "id": 588, + "id": 576, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3395:3:1", + "referencedDeclaration": 454, + "src": "3441:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 589, + "id": 577, "isConstant": false, "isLValue": false, "isPure": false, @@ -3830,13 +3666,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "3395:13:1", + "src": "3441:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 595, + "id": 583, "isConstant": false, "isLValue": false, "isPure": false, @@ -3844,7 +3680,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3395:25:1", + "src": "3441:25:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -3852,22 +3688,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3383:37:1" + "src": "3429:37:1" }, { "assignments": [ - 598 + 586 ], "declarations": [ { "constant": false, - "id": 598, + "id": 586, "mutability": "mutable", "name": "s", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3434:9:1", + "scope": 626, + "src": "3480:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3875,10 +3711,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 597, + "id": 585, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3434:7:1", + "src": "3480:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -3888,7 +3724,7 @@ "visibility": "internal" } ], - "id": 607, + "id": 595, "initialValue": { "argumentTypes": null, "arguments": [ @@ -3898,7 +3734,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 605, + "id": 593, "isConstant": false, "isLValue": false, "isPure": false, @@ -3906,14 +3742,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3339", - "id": 601, + "id": 589, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3460:2:1", + "src": "3506:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_39_by_1", @@ -3929,19 +3765,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 604, + "id": 592, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 602, + "id": 590, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3465:1:1", + "referencedDeclaration": 554, + "src": "3511:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3952,14 +3788,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 603, + "id": 591, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3469:2:1", + "src": "3515:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -3967,13 +3803,13 @@ }, "value": "66" }, - "src": "3465:6:1", + "src": "3511:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3460:11:1", + "src": "3506:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3989,18 +3825,18 @@ ], "expression": { "argumentTypes": null, - "id": 599, + "id": 587, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3446:3:1", + "referencedDeclaration": 454, + "src": "3492:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 600, + "id": 588, "isConstant": false, "isLValue": false, "isPure": false, @@ -4008,13 +3844,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "3446:13:1", + "src": "3492:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 606, + "id": 594, "isConstant": false, "isLValue": false, "isPure": false, @@ -4022,7 +3858,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3446:26:1", + "src": "3492:26:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -4030,22 +3866,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3434:38:1" + "src": "3480:38:1" }, { "assignments": [ - 609 + 597 ], "declarations": [ { "constant": false, - "id": 609, + "id": 597, "mutability": "mutable", "name": "v", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3486:7:1", + "scope": 626, + "src": "3532:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4053,10 +3889,10 @@ "typeString": "uint8" }, "typeName": { - "id": 608, + "id": 596, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3486:5:1", + "src": "3532:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -4066,7 +3902,7 @@ "visibility": "internal" } ], - "id": 618, + "id": 606, "initialValue": { "argumentTypes": null, "arguments": [ @@ -4076,7 +3912,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 616, + "id": 604, "isConstant": false, "isLValue": false, "isPure": false, @@ -4084,14 +3920,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3731", - "id": 612, + "id": 600, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3508:2:1", + "src": "3554:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -4107,19 +3943,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 615, + "id": 603, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 613, + "id": 601, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3513:1:1", + "referencedDeclaration": 554, + "src": "3559:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4130,14 +3966,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 614, + "id": 602, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3517:2:1", + "src": "3563:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -4145,13 +3981,13 @@ }, "value": "66" }, - "src": "3513:6:1", + "src": "3559:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3508:11:1", + "src": "3554:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4167,18 +4003,18 @@ ], "expression": { "argumentTypes": null, - "id": 610, + "id": 598, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3496:3:1", + "referencedDeclaration": 454, + "src": "3542:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 611, + "id": 599, "isConstant": false, "isLValue": false, "isPure": false, @@ -4186,13 +4022,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3496:11:1", + "src": "3542:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 617, + "id": 605, "isConstant": false, "isLValue": false, "isPure": false, @@ -4200,7 +4036,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3496:24:1", + "src": "3542:24:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -4208,24 +4044,24 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3486:34:1" + "src": "3532:34:1" }, { "expression": { "argumentTypes": null, - "id": 621, + "id": 609, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 619, + "id": 607, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "3534:1:1", + "referencedDeclaration": 597, + "src": "3580:1:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -4236,14 +4072,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "3237", - "id": 620, + "id": 608, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3539:2:1", + "src": "3585:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", @@ -4251,15 +4087,15 @@ }, "value": "27" }, - "src": "3534:7:1", + "src": "3580:7:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "id": 622, + "id": 610, "nodeType": "ExpressionStatement", - "src": "3534:7:1" + "src": "3580:7:1" }, { "expression": { @@ -4271,7 +4107,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 634, + "id": 622, "isConstant": false, "isLValue": false, "isPure": false, @@ -4281,12 +4117,12 @@ "arguments": [ { "argumentTypes": null, - "id": 625, + "id": 613, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "3573:4:1", + "referencedDeclaration": 496, + "src": "3619:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4294,12 +4130,12 @@ }, { "argumentTypes": null, - "id": 626, + "id": 614, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "3579:1:1", + "referencedDeclaration": 597, + "src": "3625:1:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -4307,12 +4143,12 @@ }, { "argumentTypes": null, - "id": 627, + "id": 615, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 587, - "src": "3582:1:1", + "referencedDeclaration": 575, + "src": "3628:1:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4320,12 +4156,12 @@ }, { "argumentTypes": null, - "id": 628, + "id": 616, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 598, - "src": "3585:1:1", + "referencedDeclaration": 586, + "src": "3631:1:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4351,18 +4187,18 @@ "typeString": "bytes32" } ], - "id": 624, + "id": 612, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -6, - "src": "3563:9:1", + "src": "3609:9:1", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, - "id": 629, + "id": 617, "isConstant": false, "isLValue": false, "isPure": false, @@ -4370,7 +4206,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3563:24:1", + "src": "3609:24:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -4385,40 +4221,40 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 630, + "id": 618, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3591:12:1", + "referencedDeclaration": 517, + "src": "3637:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 631, + "id": 619, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "keys", "nodeType": "MemberAccess", - "referencedDeclaration": 364, - "src": "3591:17:1", + "referencedDeclaration": 365, + "src": "3637:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, - "id": 633, + "id": 621, "indexExpression": { "argumentTypes": null, - "id": 632, + "id": 620, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 576, - "src": "3609:5:1", + "referencedDeclaration": 564, + "src": "3655:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -4429,13 +4265,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "3591:24:1", + "src": "3637:24:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3563:52:1", + "src": "3609:52:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -4444,14 +4280,14 @@ { "argumentTypes": null, "hexValue": "564141207369676e617475726520696e76616c6964", - "id": 635, + "id": 623, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3617:23:1", + "src": "3663:23:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_862afa71aa5d7cd3e53f61178438850df5cce8f1009ff0681521493b85052621", @@ -4471,7 +4307,7 @@ "typeString": "literal_string \"VAA signature invalid\"" } ], - "id": 623, + "id": 611, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -4479,13 +4315,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3555:7:1", + "src": "3601:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 636, + "id": 624, "isConstant": false, "isLValue": false, "isPure": false, @@ -4493,16 +4329,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3555:86:1", + "src": "3601:86:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 637, + "id": 625, "nodeType": "ExpressionStatement", - "src": "3555:86:1" + "src": "3601:86:1" } ] }, @@ -4512,19 +4348,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 571, + "id": 559, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 569, + "id": 557, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3296:1:1", + "referencedDeclaration": 554, + "src": "3342:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4534,38 +4370,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 570, + "id": 558, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "3300:11:1", + "referencedDeclaration": 481, + "src": "3346:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3296:15:1", + "src": "3342:15:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 639, + "id": 627, "initializationExpression": { "assignments": [ - 566 + 554 ], "declarations": [ { "constant": false, - "id": 566, + "id": 554, "mutability": "mutable", "name": "i", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 639, - "src": "3284:6:1", + "scope": 627, + "src": "3330:6:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4573,10 +4409,10 @@ "typeString": "uint256" }, "typeName": { - "id": 565, + "id": 553, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "3284:4:1", + "src": "3330:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4586,18 +4422,18 @@ "visibility": "internal" } ], - "id": 568, + "id": 556, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 567, + "id": 555, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3293:1:1", + "src": "3339:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -4606,12 +4442,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "3284:10:1" + "src": "3330:10:1" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 573, + "id": 561, "isConstant": false, "isLValue": false, "isPure": false, @@ -4619,15 +4455,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "3313:3:1", + "src": "3359:3:1", "subExpression": { "argumentTypes": null, - "id": 572, + "id": 560, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3313:1:1", + "referencedDeclaration": 554, + "src": "3359:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4638,27 +4474,27 @@ "typeString": "uint256" } }, - "id": 574, + "id": 562, "nodeType": "ExpressionStatement", - "src": "3313:3:1" + "src": "3359:3:1" }, "nodeType": "ForStatement", - "src": "3279:373:1" + "src": "3325:373:1" }, { "assignments": [ - 641 + 629 ], "declarations": [ { "constant": false, - "id": 641, + "id": 629, "mutability": "mutable", "name": "action", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "3662:12:1", + "scope": 689, + "src": "3708:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4666,10 +4502,10 @@ "typeString": "uint8" }, "typeName": { - "id": 640, + "id": 628, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3662:5:1", + "src": "3708:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -4679,7 +4515,7 @@ "visibility": "internal" } ], - "id": 648, + "id": 636, "initialValue": { "argumentTypes": null, "arguments": [ @@ -4689,19 +4525,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 646, + "id": 634, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 644, + "id": 632, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3689:6:1", + "referencedDeclaration": 488, + "src": "3735:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4712,14 +4548,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "34", - "id": 645, + "id": 633, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3698:1:1", + "src": "3744:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -4727,7 +4563,7 @@ }, "value": "4" }, - "src": "3689:10:1", + "src": "3735:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4743,18 +4579,18 @@ ], "expression": { "argumentTypes": null, - "id": 642, + "id": 630, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3677:3:1", + "referencedDeclaration": 454, + "src": "3723:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 643, + "id": 631, "isConstant": false, "isLValue": false, "isPure": false, @@ -4762,13 +4598,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3677:11:1", + "src": "3723:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 647, + "id": 635, "isConstant": false, "isLValue": false, "isPure": false, @@ -4776,7 +4612,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3677:23:1", + "src": "3723:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -4784,22 +4620,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3662:38:1" + "src": "3708:38:1" }, { "assignments": [ - 650 + 638 ], "declarations": [ { "constant": false, - "id": 650, + "id": 638, "mutability": "mutable", "name": "payload", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "3710:20:1", + "scope": 689, + "src": "3756:20:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -4807,10 +4643,10 @@ "typeString": "bytes" }, "typeName": { - "id": 649, + "id": 637, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "3710:5:1", + "src": "3756:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -4820,7 +4656,7 @@ "visibility": "internal" } ], - "id": 664, + "id": 652, "initialValue": { "argumentTypes": null, "arguments": [ @@ -4830,19 +4666,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 655, + "id": 643, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 653, + "id": 641, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3743:6:1", + "referencedDeclaration": 488, + "src": "3789:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4853,14 +4689,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "35", - "id": 654, + "id": 642, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3752:1:1", + "src": "3798:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -4868,7 +4704,7 @@ }, "value": "5" }, - "src": "3743:10:1", + "src": "3789:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4880,7 +4716,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 662, + "id": 650, "isConstant": false, "isLValue": false, "isPure": false, @@ -4889,18 +4725,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 644, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3755:3:1", + "referencedDeclaration": 454, + "src": "3801:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 657, + "id": 645, "isConstant": false, "isLValue": false, "isPure": false, @@ -4908,7 +4744,7 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3755:10:1", + "src": "3801:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4925,19 +4761,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 660, + "id": 648, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 658, + "id": 646, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3769:6:1", + "referencedDeclaration": 488, + "src": "3815:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4948,14 +4784,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "35", - "id": 659, + "id": 647, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3778:1:1", + "src": "3824:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -4963,27 +4799,27 @@ }, "value": "5" }, - "src": "3769:10:1", + "src": "3815:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "id": 661, + "id": 649, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "3768:12:1", + "src": "3814:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3755:25:1", + "src": "3801:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5003,18 +4839,18 @@ ], "expression": { "argumentTypes": null, - "id": 651, + "id": 639, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3733:3:1", + "referencedDeclaration": 454, + "src": "3779:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 652, + "id": 640, "isConstant": false, "isLValue": false, "isPure": false, @@ -5022,13 +4858,13 @@ "memberName": "slice", "nodeType": "MemberAccess", "referencedDeclaration": 55, - "src": "3733:9:1", + "src": "3779:9:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)" } }, - "id": 663, + "id": 651, "isConstant": false, "isLValue": false, "isPure": false, @@ -5036,7 +4872,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3733:48:1", + "src": "3779:48:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -5044,7 +4880,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3710:71:1" + "src": "3756:71:1" }, { "condition": { @@ -5053,19 +4889,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 667, + "id": 655, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 665, + "id": 653, "name": "action", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "3819:6:1", + "referencedDeclaration": 629, + "src": "3865:6:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -5076,14 +4912,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30783031", - "id": 666, + "id": 654, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3829:4:1", + "src": "3875:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -5091,7 +4927,7 @@ }, "value": "0x01" }, - "src": "3819:14:1", + "src": "3865:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5104,19 +4940,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 682, + "id": 670, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 680, + "id": 668, "name": "action", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "4027:6:1", + "referencedDeclaration": 629, + "src": "4073:6:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -5127,14 +4963,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30783130", - "id": 681, + "id": 669, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4037:4:1", + "src": "4083:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_16_by_1", @@ -5142,16 +4978,16 @@ }, "value": "0x10" }, - "src": "4027:14:1", + "src": "4073:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 692, + "id": 680, "nodeType": "Block", - "src": "4094:53:1", + "src": "4140:53:1", "statements": [ { "expression": { @@ -5160,14 +4996,14 @@ { "argumentTypes": null, "hexValue": "696e76616c69642056414120616374696f6e", - "id": 689, + "id": 677, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "4115:20:1", + "src": "4161:20:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27b2ea60c72d322d8c69062a768962688555c44551176a8b0389f506128d4a66", @@ -5183,7 +5019,7 @@ "typeString": "literal_string \"invalid VAA action\"" } ], - "id": 688, + "id": 676, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -5191,13 +5027,13 @@ -19 ], "referencedDeclaration": -19, - "src": "4108:6:1", + "src": "4154:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 690, + "id": 678, "isConstant": false, "isLValue": false, "isPure": false, @@ -5205,26 +5041,26 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4108:28:1", + "src": "4154:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 691, + "id": 679, "nodeType": "ExpressionStatement", - "src": "4108:28:1" + "src": "4154:28:1" } ] }, - "id": 693, + "id": 681, "nodeType": "IfStatement", - "src": "4023:124:1", + "src": "4069:124:1", "trueBody": { - "id": 687, + "id": 675, "nodeType": "Block", - "src": "4043:45:1", + "src": "4089:45:1", "statements": [ { "expression": { @@ -5232,12 +5068,12 @@ "arguments": [ { "argumentTypes": null, - "id": 684, + "id": 672, "name": "payload", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 650, - "src": "4069:7:1", + "referencedDeclaration": 638, + "src": "4115:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -5251,18 +5087,18 @@ "typeString": "bytes memory" } ], - "id": 683, + "id": 671, "name": "vaaTransfer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "4057:11:1", + "referencedDeclaration": 924, + "src": "4103:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (bytes memory)" } }, - "id": 685, + "id": 673, "isConstant": false, "isLValue": false, "isPure": false, @@ -5270,27 +5106,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4057:20:1", + "src": "4103:20:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 686, + "id": 674, "nodeType": "ExpressionStatement", - "src": "4057:20:1" + "src": "4103:20:1" } ] } }, - "id": 694, + "id": 682, "nodeType": "IfStatement", - "src": "3815:332:1", + "src": "3861:332:1", "trueBody": { - "id": 679, + "id": 667, "nodeType": "Block", - "src": "3835:182:1", + "src": "3881:182:1", "statements": [ { "expression": { @@ -5302,19 +5138,19 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 671, + "id": 659, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 669, + "id": 657, "name": "vaa_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 471, - "src": "3857:22:1", + "referencedDeclaration": 474, + "src": "3903:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -5324,18 +5160,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 670, + "id": 658, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "3883:18:1", + "referencedDeclaration": 398, + "src": "3929:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "3857:44:1", + "src": "3903:44:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5344,14 +5180,14 @@ { "argumentTypes": null, "hexValue": "6f6e6c79207468652063757272656e7420677561726469616e207365742063616e206368616e67652074686520677561726469616e20736574", - "id": 672, + "id": 660, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3903:59:1", + "src": "3949:59:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_57f82f54015302e10ddc5f5b0f8eebea6891c2be815aa07f38e9301457bc8c6a", @@ -5371,7 +5207,7 @@ "typeString": "literal_string \"only the current guardian set can change the guardian set\"" } ], - "id": 668, + "id": 656, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -5379,13 +5215,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3849:7:1", + "src": "3895:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 673, + "id": 661, "isConstant": false, "isLValue": false, "isPure": false, @@ -5393,16 +5229,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3849:114:1", + "src": "3895:114:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 674, + "id": 662, "nodeType": "ExpressionStatement", - "src": "3849:114:1" + "src": "3895:114:1" }, { "expression": { @@ -5410,12 +5246,12 @@ "arguments": [ { "argumentTypes": null, - "id": 676, + "id": 664, "name": "payload", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 650, - "src": "3998:7:1", + "referencedDeclaration": 638, + "src": "4044:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -5429,18 +5265,18 @@ "typeString": "bytes memory" } ], - "id": 675, + "id": 663, "name": "vaaUpdateGuardianSet", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 801, - "src": "3977:20:1", + "referencedDeclaration": 789, + "src": "4023:20:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (bytes memory)" } }, - "id": 677, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -5448,16 +5284,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3977:29:1", + "src": "4023:29:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 678, + "id": 666, "nodeType": "ExpressionStatement", - "src": "3977:29:1" + "src": "4023:29:1" } ] } @@ -5465,7 +5301,7 @@ { "expression": { "argumentTypes": null, - "id": 699, + "id": 687, "isConstant": false, "isLValue": false, "isPure": false, @@ -5474,26 +5310,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 695, + "id": 683, "name": "consumedVAAs", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 401, - "src": "4192:12:1", + "referencedDeclaration": 404, + "src": "4238:12:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" } }, - "id": 697, + "id": 685, "indexExpression": { "argumentTypes": null, - "id": 696, + "id": 684, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "4205:4:1", + "referencedDeclaration": 496, + "src": "4251:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -5504,7 +5340,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4192:18:1", + "src": "4238:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5515,14 +5351,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 698, + "id": 686, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "4213:4:1", + "src": "4259:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -5530,60 +5366,60 @@ }, "value": "true" }, - "src": "4192:25:1", + "src": "4238:25:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 700, + "id": 688, "nodeType": "ExpressionStatement", - "src": "4192:25:1" + "src": "4238:25:1" } ] }, "documentation": null, "functionSelector": "3bc0aee6", - "id": 702, + "id": 690, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 454, + "id": 457, "modifierName": { "argumentTypes": null, - "id": 453, + "id": 456, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "2291:12:1", + "referencedDeclaration": 2992, + "src": "2456:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "2291:12:1" + "src": "2456:12:1" } ], "name": "submitVAA", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 452, + "id": 455, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 451, + "id": 454, "mutability": "mutable", "name": "vaa", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 702, - "src": "2259:18:1", + "scope": 690, + "src": "2424:18:1", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -5591,10 +5427,10 @@ "typeString": "bytes" }, "typeName": { - "id": 450, + "id": 453, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "2259:5:1", + "src": "2424:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -5604,40 +5440,40 @@ "visibility": "internal" } ], - "src": "2249:34:1" + "src": "2414:34:1" }, "returnParameters": { - "id": 455, + "id": 458, "nodeType": "ParameterList", "parameters": [], - "src": "2304:0:1" + "src": "2469:0:1" }, - "scope": 1170, - "src": "2231:1993:1", + "scope": 1175, + "src": "2396:1874:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 800, + "id": 788, "nodeType": "Block", - "src": "4287:744:1", + "src": "4333:755:1", "statements": [ { "assignments": [ - 708 + 696 ], "declarations": [ { "constant": false, - "id": 708, + "id": 696, "mutability": "mutable", "name": "new_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4297:29:1", + "scope": 788, + "src": "4343:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5645,10 +5481,10 @@ "typeString": "uint32" }, "typeName": { - "id": 707, + "id": 695, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4297:6:1", + "src": "4343:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -5658,21 +5494,21 @@ "visibility": "internal" } ], - "id": 713, + "id": 701, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", - "id": 711, + "id": 699, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4343:1:1", + "src": "4389:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -5690,18 +5526,18 @@ ], "expression": { "argumentTypes": null, - "id": 709, + "id": 697, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4329:4:1", + "referencedDeclaration": 692, + "src": "4375:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 710, + "id": 698, "isConstant": false, "isLValue": false, "isPure": false, @@ -5709,13 +5545,13 @@ "memberName": "toUint32", "nodeType": "MemberAccess", "referencedDeclaration": 163, - "src": "4329:13:1", + "src": "4375:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint32)" } }, - "id": 712, + "id": 700, "isConstant": false, "isLValue": false, "isPure": false, @@ -5723,7 +5559,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4329:16:1", + "src": "4375:16:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -5731,22 +5567,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4297:48:1" + "src": "4343:48:1" }, { "assignments": [ - 715 + 703 ], "declarations": [ { "constant": false, - "id": 715, + "id": 703, "mutability": "mutable", "name": "len", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4355:9:1", + "scope": 788, + "src": "4401:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5754,10 +5590,10 @@ "typeString": "uint8" }, "typeName": { - "id": 714, + "id": 702, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "4355:5:1", + "src": "4401:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -5767,21 +5603,21 @@ "visibility": "internal" } ], - "id": 720, + "id": 708, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "34", - "id": 718, + "id": 706, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4380:1:1", + "src": "4426:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -5799,18 +5635,18 @@ ], "expression": { "argumentTypes": null, - "id": 716, + "id": 704, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4367:4:1", + "referencedDeclaration": 692, + "src": "4413:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 717, + "id": 705, "isConstant": false, "isLValue": false, "isPure": false, @@ -5818,13 +5654,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "4367:12:1", + "src": "4413:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 719, + "id": 707, "isConstant": false, "isLValue": false, "isPure": false, @@ -5832,7 +5668,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4367:15:1", + "src": "4413:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -5840,22 +5676,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4355:27:1" + "src": "4401:27:1" }, { "assignments": [ - 725 + 713 ], "declarations": [ { "constant": false, - "id": 725, + "id": 713, "mutability": "mutable", "name": "new_guardians", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4393:30:1", + "scope": 788, + "src": "4439:30:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -5864,19 +5700,19 @@ }, "typeName": { "baseType": { - "id": 723, + "id": 711, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4393:7:1", + "src": "4439:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 724, + "id": 712, "length": null, "nodeType": "ArrayTypeName", - "src": "4393:9:1", + "src": "4439:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -5886,18 +5722,18 @@ "visibility": "internal" } ], - "id": 731, + "id": 719, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 729, + "id": 717, "name": "len", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "4440:3:1", + "referencedDeclaration": 703, + "src": "4486:3:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -5911,40 +5747,40 @@ "typeString": "uint8" } ], - "id": 728, + "id": 716, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "NewExpression", - "src": "4426:13:1", + "src": "4472:13:1", "typeDescriptions": { "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", "typeString": "function (uint256) pure returns (address[] memory)" }, "typeName": { "baseType": { - "id": 726, + "id": 714, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4430:7:1", + "src": "4476:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 727, + "id": 715, "length": null, "nodeType": "ArrayTypeName", - "src": "4430:9:1", + "src": "4476:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" } } }, - "id": 730, + "id": 718, "isConstant": false, "isLValue": false, "isPure": false, @@ -5952,7 +5788,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4426:18:1", + "src": "4472:18:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -5960,28 +5796,28 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4393:51:1" + "src": "4439:51:1" }, { "body": { - "id": 759, + "id": 747, "nodeType": "Block", - "src": "4485:103:1", + "src": "4531:103:1", "statements": [ { "assignments": [ - 743 + 731 ], "declarations": [ { "constant": false, - "id": 743, + "id": 731, "mutability": "mutable", "name": "addr", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 759, - "src": "4499:12:1", + "scope": 747, + "src": "4545:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5989,10 +5825,10 @@ "typeString": "address" }, "typeName": { - "id": 742, + "id": 730, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4499:7:1", + "src": "4545:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -6003,7 +5839,7 @@ "visibility": "internal" } ], - "id": 752, + "id": 740, "initialValue": { "argumentTypes": null, "arguments": [ @@ -6013,7 +5849,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 750, + "id": 738, "isConstant": false, "isLValue": false, "isPure": false, @@ -6021,14 +5857,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "35", - "id": 746, + "id": 734, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4529:1:1", + "src": "4575:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -6044,19 +5880,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 749, + "id": 737, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 747, + "id": 735, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4533:1:1", + "referencedDeclaration": 721, + "src": "4579:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6067,14 +5903,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3230", - "id": 748, + "id": 736, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4537:2:1", + "src": "4583:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_20_by_1", @@ -6082,13 +5918,13 @@ }, "value": "20" }, - "src": "4533:6:1", + "src": "4579:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4529:10:1", + "src": "4575:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6104,18 +5940,18 @@ ], "expression": { "argumentTypes": null, - "id": 744, + "id": 732, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4514:4:1", + "referencedDeclaration": 692, + "src": "4560:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 745, + "id": 733, "isConstant": false, "isLValue": false, "isPure": false, @@ -6123,13 +5959,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "4514:14:1", + "src": "4560:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 751, + "id": 739, "isConstant": false, "isLValue": false, "isPure": false, @@ -6137,7 +5973,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4514:26:1", + "src": "4560:26:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -6145,12 +5981,12 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4499:41:1" + "src": "4545:41:1" }, { "expression": { "argumentTypes": null, - "id": 757, + "id": 745, "isConstant": false, "isLValue": false, "isPure": false, @@ -6159,26 +5995,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 753, + "id": 741, "name": "new_guardians", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "4554:13:1", + "referencedDeclaration": 713, + "src": "4600:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, - "id": 755, + "id": 743, "indexExpression": { "argumentTypes": null, - "id": 754, + "id": 742, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4568:1:1", + "referencedDeclaration": 721, + "src": "4614:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6189,7 +6025,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4554:16:1", + "src": "4600:16:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6199,26 +6035,26 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 756, + "id": 744, "name": "addr", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 743, - "src": "4573:4:1", + "referencedDeclaration": 731, + "src": "4619:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "4554:23:1", + "src": "4600:23:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 758, + "id": 746, "nodeType": "ExpressionStatement", - "src": "4554:23:1" + "src": "4600:23:1" } ] }, @@ -6228,19 +6064,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 738, + "id": 726, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 736, + "id": 724, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4471:1:1", + "referencedDeclaration": 721, + "src": "4517:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6250,38 +6086,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 737, + "id": 725, "name": "len", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "4475:3:1", + "referencedDeclaration": 703, + "src": "4521:3:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "4471:7:1", + "src": "4517:7:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 760, + "id": 748, "initializationExpression": { "assignments": [ - 733 + 721 ], "declarations": [ { "constant": false, - "id": 733, + "id": 721, "mutability": "mutable", "name": "i", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 760, - "src": "4459:6:1", + "scope": 748, + "src": "4505:6:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6289,10 +6125,10 @@ "typeString": "uint256" }, "typeName": { - "id": 732, + "id": 720, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "4459:4:1", + "src": "4505:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6302,18 +6138,18 @@ "visibility": "internal" } ], - "id": 735, + "id": 723, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 734, + "id": 722, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4468:1:1", + "src": "4514:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -6322,12 +6158,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "4459:10:1" + "src": "4505:10:1" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 740, + "id": 728, "isConstant": false, "isLValue": false, "isPure": false, @@ -6335,15 +6171,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "4480:3:1", + "src": "4526:3:1", "subExpression": { "argumentTypes": null, - "id": 739, + "id": 727, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4480:1:1", + "referencedDeclaration": 721, + "src": "4526:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6354,27 +6190,27 @@ "typeString": "uint256" } }, - "id": 741, + "id": 729, "nodeType": "ExpressionStatement", - "src": "4480:3:1" + "src": "4526:3:1" }, "nodeType": "ForStatement", - "src": "4454:134:1" + "src": "4500:134:1" }, { "assignments": [ - 762 + 750 ], "declarations": [ { "constant": false, - "id": 762, + "id": 750, "mutability": "mutable", "name": "old_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4598:29:1", + "scope": 788, + "src": "4644:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6382,10 +6218,10 @@ "typeString": "uint32" }, "typeName": { - "id": 761, + "id": 749, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4598:6:1", + "src": "4644:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6395,39 +6231,39 @@ "visibility": "internal" } ], - "id": 764, + "id": 752, "initialValue": { "argumentTypes": null, - "id": 763, + "id": 751, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4630:18:1", + "referencedDeclaration": 398, + "src": "4676:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, "nodeType": "VariableDeclarationStatement", - "src": "4598:50:1" + "src": "4644:50:1" }, { "expression": { "argumentTypes": null, - "id": 767, + "id": 755, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 765, + "id": 753, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4658:18:1", + "referencedDeclaration": 398, + "src": "4704:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6437,56 +6273,56 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 766, + "id": 754, "name": "new_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "4679:22:1", + "referencedDeclaration": 696, + "src": "4725:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4658:43:1", + "src": "4704:43:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 768, + "id": 756, "nodeType": "ExpressionStatement", - "src": "4658:43:1" + "src": "4704:43:1" }, { "assignments": [ - 770 + 758 ], "declarations": [ { "constant": false, - "id": 770, + "id": 758, "mutability": "mutable", "name": "new_guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4712:35:1", + "scope": 788, + "src": "4758:35:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 769, + "id": 757, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "4712:11:1", + "referencedDeclaration": 368, + "src": "4758:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -6494,18 +6330,18 @@ "visibility": "internal" } ], - "id": 775, + "id": 763, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 772, + "id": 760, "name": "new_guardians", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "4762:13:1", + "referencedDeclaration": 713, + "src": "4808:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" @@ -6514,14 +6350,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 773, + "id": 761, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4777:1:1", + "src": "4823:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -6541,18 +6377,18 @@ "typeString": "int_const 0" } ], - "id": 771, + "id": 759, "name": "GuardianSet", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 367, - "src": "4750:11:1", + "referencedDeclaration": 368, + "src": "4796:11:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_GuardianSet_$367_storage_ptr_$", + "typeIdentifier": "t_type$_t_struct$_GuardianSet_$368_storage_ptr_$", "typeString": "type(struct Wormhole.GuardianSet storage pointer)" } }, - "id": 774, + "id": 762, "isConstant": false, "isLValue": false, "isPure": false, @@ -6560,20 +6396,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4750:29:1", + "src": "4796:29:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, "nodeType": "VariableDeclarationStatement", - "src": "4712:67:1" + "src": "4758:67:1" }, { "expression": { "argumentTypes": null, - "id": 780, + "id": 768, "isConstant": false, "isLValue": false, "isPure": false, @@ -6582,26 +6418,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 776, + "id": 764, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "4789:13:1", + "referencedDeclaration": 396, + "src": "4835:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 778, + "id": 766, "indexExpression": { "argumentTypes": null, - "id": 777, + "id": 765, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4803:18:1", + "referencedDeclaration": 398, + "src": "4849:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6612,9 +6448,9 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4789:33:1", + "src": "4835:33:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, @@ -6622,31 +6458,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 779, + "id": 767, "name": "new_guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 770, - "src": "4825:16:1", + "referencedDeclaration": 758, + "src": "4871:16:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "src": "4789:52:1", + "src": "4835:52:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 781, + "id": 769, "nodeType": "ExpressionStatement", - "src": "4789:52:1" + "src": "4835:52:1" }, { "expression": { "argumentTypes": null, - "id": 793, + "id": 781, "isConstant": false, "isLValue": false, "isPure": false, @@ -6657,26 +6493,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 782, + "id": 770, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "4851:13:1", + "referencedDeclaration": 396, + "src": "4897:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 784, + "id": 772, "indexExpression": { "argumentTypes": null, - "id": 783, + "id": 771, "name": "old_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 762, - "src": "4865:22:1", + "referencedDeclaration": 750, + "src": "4911:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6687,21 +6523,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4851:37:1", + "src": "4897:37:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 785, + "id": 773, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "4851:53:1", + "referencedDeclaration": 367, + "src": "4897:53:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6715,7 +6551,7 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 792, + "id": 780, "isConstant": false, "isLValue": false, "isPure": false, @@ -6727,18 +6563,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 788, + "id": 776, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, - "src": "4914:5:1", + "src": "4960:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 789, + "id": 777, "isConstant": false, "isLValue": false, "isPure": false, @@ -6746,7 +6582,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "4914:15:1", + "src": "4960:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6760,29 +6596,29 @@ "typeString": "uint256" } ], - "id": 787, + "id": 775, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "4907:6:1", + "src": "4953:6:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint32_$", "typeString": "type(uint32)" }, "typeName": { - "id": 786, + "id": 774, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4907:6:1", + "src": "4953:6:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 790, + "id": 778, "isConstant": false, "isLValue": false, "isPure": false, @@ -6790,7 +6626,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4907:23:1", + "src": "4953:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -6801,32 +6637,32 @@ "operator": "+", "rightExpression": { "argumentTypes": null, - "id": 791, - "name": "vaa_expiry", + "id": 779, + "name": "guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "4933:10:1", + "referencedDeclaration": 400, + "src": "4979:21:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4907:36:1", + "src": "4953:47:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4851:92:1", + "src": "4897:103:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 794, + "id": 782, "nodeType": "ExpressionStatement", - "src": "4851:92:1" + "src": "4897:103:1" }, { "eventCall": { @@ -6834,12 +6670,12 @@ "arguments": [ { "argumentTypes": null, - "id": 796, + "id": 784, "name": "old_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 762, - "src": "4981:22:1", + "referencedDeclaration": 750, + "src": "5038:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6847,12 +6683,12 @@ }, { "argumentTypes": null, - "id": 797, + "id": 785, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "5005:18:1", + "referencedDeclaration": 398, + "src": "5062:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -6870,18 +6706,18 @@ "typeString": "uint32" } ], - "id": 795, + "id": 783, "name": "LogGuardianSetChanged", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 373, - "src": "4959:21:1", + "referencedDeclaration": 374, + "src": "5016:21:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$", "typeString": "function (uint32,uint32)" } }, - "id": 798, + "id": 786, "isConstant": false, "isLValue": false, "isPure": false, @@ -6889,21 +6725,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4959:65:1", + "src": "5016:65:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 799, + "id": 787, "nodeType": "EmitStatement", - "src": "4954:70:1" + "src": "5011:70:1" } ] }, "documentation": null, - "id": 801, + "id": 789, "implemented": true, "kind": "function", "modifiers": [], @@ -6911,18 +6747,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 705, + "id": 693, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 704, + "id": 692, "mutability": "mutable", "name": "data", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 801, - "src": "4260:17:1", + "scope": 789, + "src": "4306:17:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -6930,10 +6766,10 @@ "typeString": "bytes" }, "typeName": { - "id": 703, + "id": 691, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "4260:5:1", + "src": "4306:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -6943,40 +6779,40 @@ "visibility": "internal" } ], - "src": "4259:19:1" + "src": "4305:19:1" }, "returnParameters": { - "id": 706, + "id": 694, "nodeType": "ParameterList", "parameters": [], - "src": "4287:0:1" + "src": "4333:0:1" }, - "scope": 1170, - "src": "4230:801:1", + "scope": 1175, + "src": "4276:812:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 927, + "id": 923, "nodeType": "Block", - "src": "5085:1325:1", + "src": "5142:1399:1", "statements": [ { "assignments": [ - 807 + 795 ], "declarations": [ { "constant": false, - "id": 807, + "id": 795, "mutability": "mutable", "name": "source_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5138:18:1", + "scope": 923, + "src": "5195:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6984,10 +6820,10 @@ "typeString": "uint8" }, "typeName": { - "id": 806, + "id": 794, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5138:5:1", + "src": "5195:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -6997,21 +6833,21 @@ "visibility": "internal" } ], - "id": 812, + "id": 800, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "34", - "id": 810, + "id": 798, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5172:1:1", + "src": "5229:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -7029,18 +6865,18 @@ ], "expression": { "argumentTypes": null, - "id": 808, + "id": 796, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5159:4:1", + "referencedDeclaration": 791, + "src": "5216:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 809, + "id": 797, "isConstant": false, "isLValue": false, "isPure": false, @@ -7048,13 +6884,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5159:12:1", + "src": "5216:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 811, + "id": 799, "isConstant": false, "isLValue": false, "isPure": false, @@ -7062,7 +6898,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5159:15:1", + "src": "5216:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -7070,22 +6906,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5138:36:1" + "src": "5195:36:1" }, { "assignments": [ - 814 + 802 ], "declarations": [ { "constant": false, - "id": 814, + "id": 802, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5185:18:1", + "scope": 923, + "src": "5242:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7093,10 +6929,10 @@ "typeString": "uint8" }, "typeName": { - "id": 813, + "id": 801, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5185:5:1", + "src": "5242:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -7106,21 +6942,21 @@ "visibility": "internal" } ], - "id": 819, + "id": 807, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "35", - "id": 817, + "id": 805, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5219:1:1", + "src": "5276:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -7138,18 +6974,18 @@ ], "expression": { "argumentTypes": null, - "id": 815, + "id": 803, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5206:4:1", + "referencedDeclaration": 791, + "src": "5263:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 816, + "id": 804, "isConstant": false, "isLValue": false, "isPure": false, @@ -7157,13 +6993,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5206:12:1", + "src": "5263:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 818, + "id": 806, "isConstant": false, "isLValue": false, "isPure": false, @@ -7171,7 +7007,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5206:15:1", + "src": "5263:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -7179,22 +7015,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5185:36:1" + "src": "5242:36:1" }, { "assignments": [ - 821 + 809 ], "declarations": [ { "constant": false, - "id": 821, + "id": 809, "mutability": "mutable", "name": "target_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5340:22:1", + "scope": 923, + "src": "5397:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7202,10 +7038,10 @@ "typeString": "address" }, "typeName": { - "id": 820, + "id": 808, "name": "address", "nodeType": "ElementaryTypeName", - "src": "5340:7:1", + "src": "5397:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -7216,7 +7052,7 @@ "visibility": "internal" } ], - "id": 828, + "id": 816, "initialValue": { "argumentTypes": null, "arguments": [ @@ -7226,7 +7062,7 @@ "typeIdentifier": "t_rational_50_by_1", "typeString": "int_const 50" }, - "id": 826, + "id": 814, "isConstant": false, "isLValue": false, "isPure": true, @@ -7234,14 +7070,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3338", - "id": 824, + "id": 812, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5380:2:1", + "src": "5437:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_38_by_1", @@ -7254,14 +7090,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3132", - "id": 825, + "id": 813, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5385:2:1", + "src": "5442:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_12_by_1", @@ -7269,7 +7105,7 @@ }, "value": "12" }, - "src": "5380:7:1", + "src": "5437:7:1", "typeDescriptions": { "typeIdentifier": "t_rational_50_by_1", "typeString": "int_const 50" @@ -7285,18 +7121,18 @@ ], "expression": { "argumentTypes": null, - "id": 822, + "id": 810, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5365:4:1", + "referencedDeclaration": 791, + "src": "5422:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 823, + "id": 811, "isConstant": false, "isLValue": false, "isPure": false, @@ -7304,13 +7140,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "5365:14:1", + "src": "5422:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 827, + "id": 815, "isConstant": false, "isLValue": false, "isPure": false, @@ -7318,7 +7154,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5365:23:1", + "src": "5422:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -7326,22 +7162,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5340:48:1" + "src": "5397:48:1" }, { "assignments": [ - 830 + 818 ], "declarations": [ { "constant": false, - "id": 830, + "id": 818, "mutability": "mutable", "name": "token_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5399:17:1", + "scope": 923, + "src": "5456:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7349,10 +7185,10 @@ "typeString": "uint8" }, "typeName": { - "id": 829, + "id": 817, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5399:5:1", + "src": "5456:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -7362,21 +7198,21 @@ "visibility": "internal" } ], - "id": 835, + "id": 823, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "3730", - "id": 833, + "id": 821, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5432:2:1", + "src": "5489:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_70_by_1", @@ -7394,18 +7230,18 @@ ], "expression": { "argumentTypes": null, - "id": 831, + "id": 819, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5419:4:1", + "referencedDeclaration": 791, + "src": "5476:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 832, + "id": 820, "isConstant": false, "isLValue": false, "isPure": false, @@ -7413,13 +7249,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5419:12:1", + "src": "5476:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 834, + "id": 822, "isConstant": false, "isLValue": false, "isPure": false, @@ -7427,7 +7263,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5419:16:1", + "src": "5476:16:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -7435,22 +7271,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5399:36:1" + "src": "5456:36:1" }, { "assignments": [ - 837 + 825 ], "declarations": [ { "constant": false, - "id": 837, + "id": 825, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5499:14:1", + "scope": 923, + "src": "5556:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7458,10 +7294,10 @@ "typeString": "uint256" }, "typeName": { - "id": 836, + "id": 824, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5499:7:1", + "src": "5556:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7471,50 +7307,50 @@ "visibility": "internal" } ], - "id": 842, + "id": 830, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "hexValue": "313033", - "id": 840, + "hexValue": "313034", + "id": 828, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5531:3:1", + "src": "5588:3:1", "subdenomination": null, "typeDescriptions": { - "typeIdentifier": "t_rational_103_by_1", - "typeString": "int_const 103" + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" }, - "value": "103" + "value": "104" } ], "expression": { "argumentTypes": [ { - "typeIdentifier": "t_rational_103_by_1", - "typeString": "int_const 103" + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" } ], "expression": { "argumentTypes": null, - "id": 838, + "id": 826, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5516:4:1", + "referencedDeclaration": 791, + "src": "5573:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 839, + "id": 827, "isConstant": false, "isLValue": false, "isPure": false, @@ -7522,13 +7358,13 @@ "memberName": "toUint256", "nodeType": "MemberAccess", "referencedDeclaration": 271, - "src": "5516:14:1", + "src": "5573:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint256)" } }, - "id": 841, + "id": 829, "isConstant": false, "isLValue": false, "isPure": false, @@ -7536,7 +7372,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5516:19:1", + "src": "5573:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -7544,7 +7380,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5499:36:1" + "src": "5556:36:1" }, { "expression": { @@ -7556,19 +7392,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 846, + "id": 834, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 844, + "id": 832, "name": "source_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 807, - "src": "5554:12:1", + "referencedDeclaration": 795, + "src": "5611:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -7578,18 +7414,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 845, + "id": 833, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "5570:12:1", + "referencedDeclaration": 802, + "src": "5627:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5554:28:1", + "src": "5611:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -7598,14 +7434,14 @@ { "argumentTypes": null, "hexValue": "73616d6520636861696e207472616e736665727320617265206e6f7420737570706f72746564", - "id": 847, + "id": 835, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5584:40:1", + "src": "5641:40:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e4bc00dc2f1f687d1ecd0a604d39e62ed5081a3cef70cb858e5f565f9bb7da23", @@ -7625,7 +7461,7 @@ "typeString": "literal_string \"same chain transfers are not supported\"" } ], - "id": 843, + "id": 831, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -7633,13 +7469,13 @@ -18 ], "referencedDeclaration": -18, - "src": "5546:7:1", + "src": "5603:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 848, + "id": 836, "isConstant": false, "isLValue": false, "isPure": false, @@ -7647,16 +7483,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5546:79:1", + "src": "5603:79:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 849, + "id": 837, "nodeType": "ExpressionStatement", - "src": "5546:79:1" + "src": "5603:79:1" }, { "expression": { @@ -7668,19 +7504,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 853, + "id": 841, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 851, + "id": 839, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "5643:12:1", + "referencedDeclaration": 802, + "src": "5700:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -7690,18 +7526,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 852, + "id": 840, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "5659:8:1", + "referencedDeclaration": 359, + "src": "5716:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5643:24:1", + "src": "5700:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -7710,14 +7546,14 @@ { "argumentTypes": null, "hexValue": "7472616e73666572206d75737420626520696e636f6d696e67", - "id": 854, + "id": 842, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5669:27:1", + "src": "5726:27:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_cbd36b1271ec4677f9b6b0ce3c590e298ab53454b431f3898527107beeed1a5a", @@ -7737,7 +7573,7 @@ "typeString": "literal_string \"transfer must be incoming\"" } ], - "id": 850, + "id": 838, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -7745,13 +7581,13 @@ -18 ], "referencedDeclaration": -18, - "src": "5635:7:1", + "src": "5692:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 855, + "id": 843, "isConstant": false, "isLValue": false, "isPure": false, @@ -7759,16 +7595,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5635:62:1", + "src": "5692:62:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 856, + "id": 844, "nodeType": "ExpressionStatement", - "src": "5635:62:1" + "src": "5692:62:1" }, { "condition": { @@ -7777,19 +7613,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 859, + "id": 847, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 857, + "id": 845, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "5712:11:1", + "referencedDeclaration": 818, + "src": "5769:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -7799,42 +7635,42 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 858, + "id": 846, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "5727:8:1", + "referencedDeclaration": 359, + "src": "5784:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5712:23:1", + "src": "5769:23:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 925, + "id": 921, "nodeType": "Block", - "src": "6259:145:1", + "src": "6390:145:1", "statements": [ { "assignments": [ - 909 + 905 ], "declarations": [ { "constant": false, - "id": 909, + "id": 905, "mutability": "mutable", "name": "token_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 925, - "src": "6273:21:1", + "scope": 921, + "src": "6404:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7842,10 +7678,10 @@ "typeString": "address" }, "typeName": { - "id": 908, + "id": 904, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6273:7:1", + "src": "6404:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -7856,7 +7692,7 @@ "visibility": "internal" } ], - "id": 916, + "id": 912, "initialValue": { "argumentTypes": null, "arguments": [ @@ -7866,7 +7702,7 @@ "typeIdentifier": "t_rational_83_by_1", "typeString": "int_const 83" }, - "id": 914, + "id": 910, "isConstant": false, "isLValue": false, "isPure": true, @@ -7874,14 +7710,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3731", - "id": 912, + "id": 908, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6312:2:1", + "src": "6443:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -7894,14 +7730,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3132", - "id": 913, + "id": 909, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6317:2:1", + "src": "6448:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_12_by_1", @@ -7909,7 +7745,7 @@ }, "value": "12" }, - "src": "6312:7:1", + "src": "6443:7:1", "typeDescriptions": { "typeIdentifier": "t_rational_83_by_1", "typeString": "int_const 83" @@ -7925,18 +7761,18 @@ ], "expression": { "argumentTypes": null, - "id": 910, + "id": 906, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "6297:4:1", + "referencedDeclaration": 791, + "src": "6428:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 911, + "id": 907, "isConstant": false, "isLValue": false, "isPure": false, @@ -7944,13 +7780,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "6297:14:1", + "src": "6428:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 915, + "id": 911, "isConstant": false, "isLValue": false, "isPure": false, @@ -7958,7 +7794,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6297:23:1", + "src": "6428:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -7966,7 +7802,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "6273:47:1" + "src": "6404:47:1" }, { "expression": { @@ -7974,12 +7810,12 @@ "arguments": [ { "argumentTypes": null, - "id": 921, + "id": 917, "name": "target_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "6370:14:1", + "referencedDeclaration": 809, + "src": "6501:14:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7987,12 +7823,12 @@ }, { "argumentTypes": null, - "id": 922, + "id": 918, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 837, - "src": "6386:6:1", + "referencedDeclaration": 825, + "src": "6517:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8015,12 +7851,12 @@ "arguments": [ { "argumentTypes": null, - "id": 918, + "id": 914, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 909, - "src": "6342:13:1", + "referencedDeclaration": 905, + "src": "6473:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8034,18 +7870,18 @@ "typeString": "address" } ], - "id": 917, + "id": 913, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "6335:6:1", + "referencedDeclaration": 2536, + "src": "6466:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 919, + "id": 915, "isConstant": false, "isLValue": false, "isPure": false, @@ -8053,28 +7889,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6335:21:1", + "src": "6466:21:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 920, + "id": 916, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "safeTransfer", "nodeType": "MemberAccess", - "referencedDeclaration": 2056, - "src": "6335:34:1", + "referencedDeclaration": 2570, + "src": "6466:34:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2022_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2536_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2536_$", "typeString": "function (contract IERC20,address,uint256)" } }, - "id": 923, + "id": 919, "isConstant": false, "isLValue": false, "isPure": false, @@ -8082,41 +7918,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6335:58:1", + "src": "6466:58:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 924, + "id": 920, "nodeType": "ExpressionStatement", - "src": "6335:58:1" + "src": "6466:58:1" } ] }, - "id": 926, + "id": 922, "nodeType": "IfStatement", - "src": "5708:696:1", + "src": "5765:770:1", "trueBody": { - "id": 907, + "id": 903, "nodeType": "Block", - "src": "5737:516:1", + "src": "5794:590:1", "statements": [ { "assignments": [ - 861 + 849 ], "declarations": [ { "constant": false, - "id": 861, + "id": 849, "mutability": "mutable", "name": "token_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5751:21:1", + "scope": 903, + "src": "5808:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8124,10 +7960,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 860, + "id": 848, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "5751:7:1", + "src": "5808:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -8137,21 +7973,21 @@ "visibility": "internal" } ], - "id": 866, + "id": 854, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "3731", - "id": 864, + "id": 852, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5790:2:1", + "src": "5847:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -8169,18 +8005,18 @@ ], "expression": { "argumentTypes": null, - "id": 862, + "id": 850, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5775:4:1", + "referencedDeclaration": 791, + "src": "5832:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 863, + "id": 851, "isConstant": false, "isLValue": false, "isPure": false, @@ -8188,13 +8024,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "5775:14:1", + "src": "5832:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 865, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -8202,7 +8038,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5775:18:1", + "src": "5832:18:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -8210,22 +8046,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5751:42:1" + "src": "5808:42:1" }, { "assignments": [ - 868 + 856 ], "declarations": [ { "constant": false, - "id": 868, + "id": 856, "mutability": "mutable", "name": "asset_id", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5807:16:1", + "scope": 903, + "src": "5864:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8233,10 +8069,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 867, + "id": 855, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "5807:7:1", + "src": "5864:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -8246,7 +8082,7 @@ "visibility": "internal" } ], - "id": 876, + "id": 864, "initialValue": { "argumentTypes": null, "arguments": [ @@ -8255,12 +8091,12 @@ "arguments": [ { "argumentTypes": null, - "id": 872, + "id": 860, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "5853:11:1", + "referencedDeclaration": 818, + "src": "5910:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -8268,12 +8104,12 @@ }, { "argumentTypes": null, - "id": 873, + "id": 861, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 861, - "src": "5866:13:1", + "referencedDeclaration": 849, + "src": "5923:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -8293,18 +8129,18 @@ ], "expression": { "argumentTypes": null, - "id": 870, + "id": 858, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -1, - "src": "5836:3:1", + "src": "5893:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 871, + "id": 859, "isConstant": false, "isLValue": false, "isPure": true, @@ -8312,13 +8148,13 @@ "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "5836:16:1", + "src": "5893:16:1", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 874, + "id": 862, "isConstant": false, "isLValue": false, "isPure": false, @@ -8326,7 +8162,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5836:44:1", + "src": "5893:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -8341,18 +8177,18 @@ "typeString": "bytes memory" } ], - "id": 869, + "id": 857, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, - "src": "5826:9:1", + "src": "5883:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 875, + "id": 863, "isConstant": false, "isLValue": false, "isPure": false, @@ -8360,7 +8196,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5826:55:1", + "src": "5883:55:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -8368,22 +8204,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5807:74:1" + "src": "5864:74:1" }, { "assignments": [ - 878 + 866 ], "declarations": [ { "constant": false, - "id": 878, + "id": 866, "mutability": "mutable", "name": "wrapped_asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5973:21:1", + "scope": 903, + "src": "6030:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8391,10 +8227,10 @@ "typeString": "address" }, "typeName": { - "id": 877, + "id": 865, "name": "address", "nodeType": "ElementaryTypeName", - "src": "5973:7:1", + "src": "6030:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -8405,31 +8241,31 @@ "visibility": "internal" } ], - "id": 882, + "id": 870, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 879, + "id": 867, "name": "wrappedAssets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "5997:13:1", + "referencedDeclaration": 408, + "src": "6054:13:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" } }, - "id": 881, + "id": 869, "indexExpression": { "argumentTypes": null, - "id": 880, + "id": 868, "name": "asset_id", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 868, - "src": "6011:8:1", + "referencedDeclaration": 856, + "src": "6068:8:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -8440,14 +8276,14 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "5997:23:1", + "src": "6054:23:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "5973:47:1" + "src": "6030:47:1" }, { "condition": { @@ -8456,19 +8292,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 888, + "id": 876, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 883, + "id": 871, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6038:13:1", + "referencedDeclaration": 866, + "src": "6095:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8482,14 +8318,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 886, + "id": 874, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6063:1:1", + "src": "6120:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -8505,29 +8341,29 @@ "typeString": "int_const 0" } ], - "id": 885, + "id": 873, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "6055:7:1", + "src": "6112:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 884, + "id": 872, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6055:7:1", + "src": "6112:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 887, + "id": 875, "isConstant": false, "isLValue": false, "isPure": true, @@ -8535,44 +8371,153 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6055:10:1", + "src": "6112:10:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "6038:27:1", + "src": "6095:27:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 898, + "id": 894, "nodeType": "IfStatement", - "src": "6034:138:1", + "src": "6091:212:1", "trueBody": { - "id": 897, + "id": 893, "nodeType": "Block", - "src": "6067:105:1", + "src": "6124:179:1", "statements": [ + { + "assignments": [ + 878 + ], + "declarations": [ + { + "constant": false, + "id": 878, + "mutability": "mutable", + "name": "asset_decimals", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 893, + "src": "6142:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 877, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "6142:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 883, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "313033", + "id": 881, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6178:3:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + }, + "value": "103" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + } + ], + "expression": { + "argumentTypes": null, + "id": 879, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 791, + "src": "6165:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUint8", + "nodeType": "MemberAccess", + "referencedDeclaration": 109, + "src": "6165:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint256) pure returns (uint8)" + } + }, + "id": 882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6165:17:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6142:40:1" + }, { "expression": { "argumentTypes": null, - "id": 895, + "id": 891, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 889, + "id": 884, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6085:13:1", + "referencedDeclaration": 866, + "src": "6200:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8585,12 +8530,12 @@ "arguments": [ { "argumentTypes": null, - "id": 891, + "id": 886, "name": "asset_id", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 868, - "src": "6120:8:1", + "referencedDeclaration": 856, + "src": "6235:8:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -8598,12 +8543,12 @@ }, { "argumentTypes": null, - "id": 892, + "id": 887, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "6130:11:1", + "referencedDeclaration": 818, + "src": "6245:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -8611,16 +8556,29 @@ }, { "argumentTypes": null, - "id": 893, + "id": 888, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 861, - "src": "6143:13:1", + "referencedDeclaration": 849, + "src": "6258:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } + }, + { + "argumentTypes": null, + "id": 889, + "name": "asset_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 878, + "src": "6273:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } } ], "expression": { @@ -8636,20 +8594,24 @@ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" } ], - "id": 890, + "id": 885, "name": "deployWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "6101:18:1", + "referencedDeclaration": 967, + "src": "6216:18:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint8_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32) returns (address)" + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_uint8_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,uint8) returns (address)" } }, - "id": 894, + "id": 890, "isConstant": false, "isLValue": false, "isPure": false, @@ -8657,22 +8619,22 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6101:56:1", + "src": "6216:72:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "6085:72:1", + "src": "6200:88:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 896, + "id": 892, "nodeType": "ExpressionStatement", - "src": "6085:72:1" + "src": "6200:88:1" } ] } @@ -8683,12 +8645,12 @@ "arguments": [ { "argumentTypes": null, - "id": 903, + "id": 899, "name": "target_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "6219:14:1", + "referencedDeclaration": 809, + "src": "6350:14:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8696,12 +8658,12 @@ }, { "argumentTypes": null, - "id": 904, + "id": 900, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 837, - "src": "6235:6:1", + "referencedDeclaration": 825, + "src": "6366:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8724,12 +8686,12 @@ "arguments": [ { "argumentTypes": null, - "id": 900, + "id": 896, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6199:13:1", + "referencedDeclaration": 866, + "src": "6330:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8743,18 +8705,18 @@ "typeString": "address" } ], - "id": 899, + "id": 895, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "6186:12:1", + "referencedDeclaration": 1732, + "src": "6317:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 901, + "id": 897, "isConstant": false, "isLValue": false, "isPure": false, @@ -8762,28 +8724,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6186:27:1", + "src": "6317:27:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 902, + "id": 898, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mint", "nodeType": "MemberAccess", - "referencedDeclaration": 1263, - "src": "6186:32:1", + "referencedDeclaration": 1270, + "src": "6317:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256) external" } }, - "id": 905, + "id": 901, "isConstant": false, "isLValue": false, "isPure": false, @@ -8791,16 +8753,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6186:56:1", + "src": "6317:56:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 906, + "id": 902, "nodeType": "ExpressionStatement", - "src": "6186:56:1" + "src": "6317:56:1" } ] } @@ -8808,7 +8770,7 @@ ] }, "documentation": null, - "id": 928, + "id": 924, "implemented": true, "kind": "function", "modifiers": [], @@ -8816,18 +8778,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 804, + "id": 792, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 803, + "id": 791, "mutability": "mutable", "name": "data", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 928, - "src": "5058:17:1", + "scope": 924, + "src": "5115:17:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -8835,10 +8797,10 @@ "typeString": "bytes" }, "typeName": { - "id": 802, + "id": 790, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "5058:5:1", + "src": "5115:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -8848,40 +8810,40 @@ "visibility": "internal" } ], - "src": "5057:19:1" + "src": "5114:19:1" }, "returnParameters": { - "id": 805, + "id": 793, "nodeType": "ParameterList", "parameters": [], - "src": "5085:0:1" + "src": "5142:0:1" }, - "scope": 1170, - "src": "5037:1373:1", + "scope": 1175, + "src": "5094:1447:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 967, + "id": 966, "nodeType": "Block", - "src": "6531:791:1", + "src": "6678:808:1", "statements": [ { "assignments": [ - 940 + 938 ], "declarations": [ { "constant": false, - "id": 940, + "id": 938, "mutability": "mutable", "name": "targetBytes", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 967, - "src": "6709:19:1", + "scope": 966, + "src": "6856:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8889,10 +8851,10 @@ "typeString": "bytes20" }, "typeName": { - "id": 939, + "id": 937, "name": "bytes20", "nodeType": "ElementaryTypeName", - "src": "6709:7:1", + "src": "6856:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes20", "typeString": "bytes20" @@ -8902,18 +8864,18 @@ "visibility": "internal" } ], - "id": 945, + "id": 943, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 943, + "id": 941, "name": "wrappedAssetMaster", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 355, - "src": "6739:18:1", + "referencedDeclaration": 356, + "src": "6886:18:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8927,29 +8889,29 @@ "typeString": "address" } ], - "id": 942, + "id": 940, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "6731:7:1", + "src": "6878:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes20_$", "typeString": "type(bytes20)" }, "typeName": { - "id": 941, + "id": 939, "name": "bytes20", "nodeType": "ElementaryTypeName", - "src": "6731:7:1", + "src": "6878:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 944, + "id": 942, "isConstant": false, "isLValue": false, "isPure": false, @@ -8957,7 +8919,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6731:27:1", + "src": "6878:27:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes20", @@ -8965,22 +8927,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "6709:49:1" + "src": "6856:49:1" }, { "AST": { "nodeType": "YulBlock", - "src": "6777:341:1", + "src": "6924:348:1", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6791:24:1", + "src": "6938:24:1", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "6810:4:1", + "src": "6957:4:1", "type": "", "value": "0x40" } @@ -8988,16 +8950,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "6804:5:1" + "src": "6951:5:1" }, "nodeType": "YulFunctionCall", - "src": "6804:11:1" + "src": "6951:11:1" }, "variables": [ { "name": "clone", "nodeType": "YulTypedName", - "src": "6795:5:1", + "src": "6942:5:1", "type": "" } ] @@ -9008,12 +8970,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6835:5:1" + "src": "6982:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6842:66:1", + "src": "6989:66:1", "type": "", "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000" } @@ -9021,13 +8983,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6828:6:1" + "src": "6975:6:1" }, "nodeType": "YulFunctionCall", - "src": "6828:81:1" + "src": "6975:81:1" }, "nodeType": "YulExpressionStatement", - "src": "6828:81:1" + "src": "6975:81:1" }, { "expression": { @@ -9037,12 +8999,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6933:5:1" + "src": "7080:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6940:4:1", + "src": "7087:4:1", "type": "", "value": "0x14" } @@ -9050,27 +9012,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6929:3:1" + "src": "7076:3:1" }, "nodeType": "YulFunctionCall", - "src": "6929:16:1" + "src": "7076:16:1" }, { "name": "targetBytes", "nodeType": "YulIdentifier", - "src": "6947:11:1" + "src": "7094:11:1" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6922:6:1" + "src": "7069:6:1" }, "nodeType": "YulFunctionCall", - "src": "6922:37:1" + "src": "7069:37:1" }, "nodeType": "YulExpressionStatement", - "src": "6922:37:1" + "src": "7069:37:1" }, { "expression": { @@ -9080,12 +9042,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6983:5:1" + "src": "7130:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6990:4:1", + "src": "7137:4:1", "type": "", "value": "0x28" } @@ -9093,15 +9055,15 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6979:3:1" + "src": "7126:3:1" }, "nodeType": "YulFunctionCall", - "src": "6979:16:1" + "src": "7126:16:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6997:66:1", + "src": "7144:66:1", "type": "", "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000" } @@ -9109,52 +9071,57 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6972:6:1" + "src": "7119:6:1" }, "nodeType": "YulFunctionCall", - "src": "6972:92:1" + "src": "7119:92:1" }, "nodeType": "YulExpressionStatement", - "src": "6972:92:1" + "src": "7119:92:1" }, { "nodeType": "YulAssignment", - "src": "7077:31:1", + "src": "7224:38:1", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "7093:1:1", + "src": "7241:1:1", "type": "", "value": "0" }, { "name": "clone", "nodeType": "YulIdentifier", - "src": "7096:5:1" + "src": "7244:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7103:4:1", + "src": "7251:4:1", "type": "", "value": "0x37" + }, + { + "name": "seed", + "nodeType": "YulIdentifier", + "src": "7257:4:1" } ], "functionName": { - "name": "create", + "name": "create2", "nodeType": "YulIdentifier", - "src": "7086:6:1" + "src": "7233:7:1" }, "nodeType": "YulFunctionCall", - "src": "7086:22:1" + "src": "7233:29:1" }, "variableNames": [ { "name": "asset", "nodeType": "YulIdentifier", - "src": "7077:5:1" + "src": "7224:5:1" } ] } @@ -9163,23 +9130,30 @@ "evmVersion": "istanbul", "externalReferences": [ { - "declaration": 937, + "declaration": 935, "isOffset": false, "isSlot": false, - "src": "7077:5:1", + "src": "7224:5:1", "valueSize": 1 }, { - "declaration": 940, + "declaration": 926, "isOffset": false, "isSlot": false, - "src": "6947:11:1", + "src": "7257:4:1", + "valueSize": 1 + }, + { + "declaration": 938, + "isOffset": false, + "isSlot": false, + "src": "7094:11:1", "valueSize": 1 } ], - "id": 946, + "id": 944, "nodeType": "InlineAssembly", - "src": "6768:350:1" + "src": "6915:357:1" }, { "expression": { @@ -9187,12 +9161,12 @@ "arguments": [ { "argumentTypes": null, - "id": 951, + "id": 949, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 932, - "src": "7187:11:1", + "referencedDeclaration": 928, + "src": "7341:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -9200,16 +9174,29 @@ }, { "argumentTypes": null, - "id": 952, + "id": 950, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "7200:13:1", + "referencedDeclaration": 930, + "src": "7354:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } + }, + { + "argumentTypes": null, + "id": 951, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 932, + "src": "7369:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } } ], "expression": { @@ -9221,6 +9208,10 @@ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" } ], "expression": { @@ -9228,12 +9219,12 @@ "arguments": [ { "argumentTypes": null, - "id": 948, + "id": 946, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7169:5:1", + "referencedDeclaration": 935, + "src": "7323:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9247,18 +9238,18 @@ "typeString": "address" } ], - "id": 947, + "id": 945, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7156:12:1", + "referencedDeclaration": 1732, + "src": "7310:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 949, + "id": 947, "isConstant": false, "isLValue": false, "isPure": false, @@ -9266,28 +9257,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7156:19:1", + "src": "7310:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 950, + "id": 948, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "initialize", "nodeType": "MemberAccess", - "referencedDeclaration": 1242, - "src": "7156:30:1", + "referencedDeclaration": 1249, + "src": "7310:30:1", "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint8_$_t_bytes32_$returns$__$", - "typeString": "function (uint8,bytes32) external" + "typeIdentifier": "t_function_external_nonpayable$_t_uint8_$_t_bytes32_$_t_uint8_$returns$__$", + "typeString": "function (uint8,bytes32,uint8) external" } }, - "id": 953, + "id": 952, "isConstant": false, "isLValue": false, "isPure": false, @@ -9295,21 +9286,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7156:58:1", + "src": "7310:68:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 954, + "id": 953, "nodeType": "ExpressionStatement", - "src": "7156:58:1" + "src": "7310:68:1" }, { "expression": { "argumentTypes": null, - "id": 959, + "id": 958, "isConstant": false, "isLValue": false, "isPure": false, @@ -9318,26 +9309,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 955, + "id": 954, "name": "wrappedAssets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "7250:13:1", + "referencedDeclaration": 408, + "src": "7414:13:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" } }, - "id": 957, + "id": 956, "indexExpression": { "argumentTypes": null, - "id": 956, + "id": 955, "name": "seed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "7264:4:1", + "referencedDeclaration": 926, + "src": "7428:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -9348,7 +9339,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7250:19:1", + "src": "7414:19:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9358,31 +9349,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 958, + "id": 957, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7272:5:1", + "referencedDeclaration": 935, + "src": "7436:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7250:27:1", + "src": "7414:27:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 960, + "id": 959, "nodeType": "ExpressionStatement", - "src": "7250:27:1" + "src": "7414:27:1" }, { "expression": { "argumentTypes": null, - "id": 965, + "id": 964, "isConstant": false, "isLValue": false, "isPure": false, @@ -9391,26 +9382,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 961, + "id": 960, "name": "isWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "7287:14:1", + "referencedDeclaration": 412, + "src": "7451:14:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" } }, - "id": 963, + "id": 962, "indexExpression": { "argumentTypes": null, - "id": 962, + "id": 961, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7302:5:1", + "referencedDeclaration": 935, + "src": "7466:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9421,7 +9412,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7287:21:1", + "src": "7451:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9432,14 +9423,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 964, + "id": 963, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "7311:4:1", + "src": "7475:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -9447,20 +9438,20 @@ }, "value": "true" }, - "src": "7287:28:1", + "src": "7451:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 966, + "id": 965, "nodeType": "ExpressionStatement", - "src": "7287:28:1" + "src": "7451:28:1" } ] }, "documentation": null, - "id": 968, + "id": 967, "implemented": true, "kind": "function", "modifiers": [], @@ -9468,18 +9459,74 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 935, + "id": 933, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 930, + "id": 926, "mutability": "mutable", "name": "seed", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6444:12:1", + "scope": 967, + "src": "6575:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 925, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6575:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 928, + "mutability": "mutable", + "name": "token_chain", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 967, + "src": "6589:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 927, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "6589:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 930, + "mutability": "mutable", + "name": "token_address", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 967, + "src": "6608:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9490,7 +9537,7 @@ "id": 929, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "6444:7:1", + "src": "6608:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -9503,11 +9550,11 @@ "constant": false, "id": 932, "mutability": "mutable", - "name": "token_chain", + "name": "decimals", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6458:17:1", + "scope": 967, + "src": "6631:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9518,7 +9565,7 @@ "id": 931, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "6458:5:1", + "src": "6631:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -9526,51 +9573,23 @@ }, "value": null, "visibility": "internal" - }, - { - "constant": false, - "id": 934, - "mutability": "mutable", - "name": "token_address", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 968, - "src": "6477:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 933, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6477:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" } ], - "src": "6443:56:1" + "src": "6574:72:1" }, "returnParameters": { - "id": 938, + "id": 936, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 937, + "id": 935, "mutability": "mutable", "name": "asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6517:13:1", + "scope": 967, + "src": "6664:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9578,10 +9597,10 @@ "typeString": "address" }, "typeName": { - "id": 936, + "id": 934, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6517:7:1", + "src": "6664:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9592,19 +9611,19 @@ "visibility": "internal" } ], - "src": "6516:15:1" + "src": "6663:15:1" }, - "scope": 1170, - "src": "6416:906:1", + "scope": 1175, + "src": "6547:939:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 1099, + "id": 1103, "nodeType": "Block", - "src": "7526:1034:1", + "src": "7662:1059:1", "statements": [ { "expression": { @@ -9616,19 +9635,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 986, + "id": 985, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 984, + "id": 983, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "7544:6:1", + "referencedDeclaration": 971, + "src": "7680:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9639,14 +9658,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 985, + "id": 984, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "7554:1:1", + "src": "7690:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -9654,7 +9673,7 @@ }, "value": "0" }, - "src": "7544:11:1", + "src": "7680:11:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9663,14 +9682,14 @@ { "argumentTypes": null, "hexValue": "616d6f756e74206d757374206e6f742062652030", - "id": 987, + "id": 986, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "7557:22:1", + "src": "7693:22:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c3143f59cb0e580c5873dd9b2860385487237680573a0afd40e8c0860e76a5d3", @@ -9690,7 +9709,7 @@ "typeString": "literal_string \"amount must not be 0\"" } ], - "id": 983, + "id": 982, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -9698,13 +9717,13 @@ -18 ], "referencedDeclaration": -18, - "src": "7536:7:1", + "src": "7672:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 988, + "id": 987, "isConstant": false, "isLValue": false, "isPure": false, @@ -9712,31 +9731,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7536:44:1", + "src": "7672:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 989, + "id": 988, "nodeType": "ExpressionStatement", - "src": "7536:44:1" + "src": "7672:44:1" }, { "assignments": [ - 991 + 990 ], "declarations": [ { "constant": false, - "id": 991, + "id": 990, "mutability": "mutable", "name": "asset_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1099, - "src": "7591:17:1", + "scope": 1103, + "src": "7727:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9744,10 +9763,10 @@ "typeString": "uint8" }, "typeName": { - "id": 990, + "id": 989, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "7591:5:1", + "src": "7727:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -9757,37 +9776,37 @@ "visibility": "internal" } ], - "id": 993, + "id": 992, "initialValue": { "argumentTypes": null, - "id": 992, + "id": 991, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "7611:8:1", + "referencedDeclaration": 359, + "src": "7747:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "VariableDeclarationStatement", - "src": "7591:28:1" + "src": "7727:28:1" }, { "assignments": [ - 995 + 994 ], "declarations": [ { "constant": false, - "id": 995, + "id": 994, "mutability": "mutable", "name": "asset_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1099, - "src": "7629:21:1", + "scope": 1103, + "src": "7765:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9795,10 +9814,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 994, + "id": 993, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7629:7:1", + "src": "7765:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -9808,36 +9827,36 @@ "visibility": "internal" } ], - "id": 996, + "id": 995, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "7629:21:1" + "src": "7765:21:1" }, { "condition": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 997, + "id": 996, "name": "isWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "7664:14:1", + "referencedDeclaration": 412, + "src": "7800:14:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" } }, - "id": 999, + "id": 998, "indexExpression": { "argumentTypes": null, - "id": 998, + "id": 997, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7679:5:1", + "referencedDeclaration": 969, + "src": "7815:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9848,31 +9867,31 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7664:21:1", + "src": "7800:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 1080, + "id": 1079, "nodeType": "Block", - "src": "7886:539:1", + "src": "8022:539:1", "statements": [ { "assignments": [ - 1027 + 1026 ], "declarations": [ { "constant": false, - "id": 1027, + "id": 1026, "mutability": "mutable", "name": "balanceBefore", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1080, - "src": "7900:21:1", + "scope": 1079, + "src": "8036:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9880,10 +9899,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1026, + "id": 1025, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7900:7:1", + "src": "8036:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9893,7 +9912,7 @@ "visibility": "internal" } ], - "id": 1037, + "id": 1036, "initialValue": { "argumentTypes": null, "arguments": [ @@ -9902,14 +9921,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1034, + "id": 1033, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "7956:4:1", + "src": "8092:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -9917,33 +9936,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1033, + "id": 1032, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "7948:7:1", + "src": "8084:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1032, + "id": 1031, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7948:7:1", + "src": "8084:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1035, + "id": 1034, "isConstant": false, "isLValue": false, "isPure": false, @@ -9951,7 +9970,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7948:13:1", + "src": "8084:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -9971,12 +9990,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1029, + "id": 1028, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7931:5:1", + "referencedDeclaration": 969, + "src": "8067:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9990,18 +10009,18 @@ "typeString": "address" } ], - "id": 1028, + "id": 1027, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "7924:6:1", + "referencedDeclaration": 2536, + "src": "8060:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1030, + "id": 1029, "isConstant": false, "isLValue": false, "isPure": false, @@ -10009,28 +10028,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7924:13:1", + "src": "8060:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1031, + "id": 1030, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 1961, - "src": "7924:23:1", + "referencedDeclaration": 2475, + "src": "8060:23:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 1036, + "id": 1035, "isConstant": false, "isLValue": false, "isPure": false, @@ -10038,7 +10057,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7924:38:1", + "src": "8060:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -10046,7 +10065,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "7900:62:1" + "src": "8036:62:1" }, { "expression": { @@ -10056,18 +10075,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1042, + "id": 1041, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8007:3:1", + "src": "8143:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1043, + "id": 1042, "isConstant": false, "isLValue": false, "isPure": false, @@ -10075,7 +10094,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8007:10:1", + "src": "8143:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -10086,14 +10105,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1046, + "id": 1045, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "8027:4:1", + "src": "8163:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -10101,33 +10120,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1045, + "id": 1044, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8019:7:1", + "src": "8155:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1044, + "id": 1043, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8019:7:1", + "src": "8155:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1047, + "id": 1046, "isConstant": false, "isLValue": false, "isPure": false, @@ -10135,7 +10154,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8019:13:1", + "src": "8155:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -10144,12 +10163,12 @@ }, { "argumentTypes": null, - "id": 1048, + "id": 1047, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8034:6:1", + "referencedDeclaration": 971, + "src": "8170:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10176,12 +10195,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1039, + "id": 1038, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7983:5:1", + "referencedDeclaration": 969, + "src": "8119:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10195,18 +10214,18 @@ "typeString": "address" } ], - "id": 1038, + "id": 1037, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "7976:6:1", + "referencedDeclaration": 2536, + "src": "8112:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1040, + "id": 1039, "isConstant": false, "isLValue": false, "isPure": false, @@ -10214,28 +10233,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7976:13:1", + "src": "8112:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1041, + "id": 1040, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "safeTransferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 2081, - "src": "7976:30:1", + "referencedDeclaration": 2595, + "src": "8112:30:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2022_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2536_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2536_$", "typeString": "function (contract IERC20,address,address,uint256)" } }, - "id": 1049, + "id": 1048, "isConstant": false, "isLValue": false, "isPure": false, @@ -10243,31 +10262,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7976:65:1", + "src": "8112:65:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1050, + "id": 1049, "nodeType": "ExpressionStatement", - "src": "7976:65:1" + "src": "8112:65:1" }, { "assignments": [ - 1052 + 1051 ], "declarations": [ { "constant": false, - "id": 1052, + "id": 1051, "mutability": "mutable", "name": "balanceAfter", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1080, - "src": "8055:20:1", + "scope": 1079, + "src": "8191:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10275,10 +10294,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1051, + "id": 1050, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8055:7:1", + "src": "8191:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10288,7 +10307,7 @@ "visibility": "internal" } ], - "id": 1062, + "id": 1061, "initialValue": { "argumentTypes": null, "arguments": [ @@ -10297,14 +10316,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1059, + "id": 1058, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "8110:4:1", + "src": "8246:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -10312,33 +10331,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1058, + "id": 1057, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8102:7:1", + "src": "8238:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1057, + "id": 1056, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8102:7:1", + "src": "8238:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1060, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -10346,7 +10365,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8102:13:1", + "src": "8238:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -10366,12 +10385,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1054, + "id": 1053, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "8085:5:1", + "referencedDeclaration": 969, + "src": "8221:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10385,18 +10404,18 @@ "typeString": "address" } ], - "id": 1053, + "id": 1052, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "8078:6:1", + "referencedDeclaration": 2536, + "src": "8214:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1055, + "id": 1054, "isConstant": false, "isLValue": false, "isPure": false, @@ -10404,28 +10423,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8078:13:1", + "src": "8214:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1056, + "id": 1055, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 1961, - "src": "8078:23:1", + "referencedDeclaration": 2475, + "src": "8214:23:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 1061, + "id": 1060, "isConstant": false, "isLValue": false, "isPure": false, @@ -10433,7 +10452,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8078:38:1", + "src": "8214:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -10441,24 +10460,24 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "8055:61:1" + "src": "8191:61:1" }, { "expression": { "argumentTypes": null, - "id": 1068, + "id": 1067, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1063, + "id": 1062, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8321:6:1", + "referencedDeclaration": 971, + "src": "8457:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10471,12 +10490,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1066, + "id": 1065, "name": "balanceBefore", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "8347:13:1", + "referencedDeclaration": 1026, + "src": "8483:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10492,32 +10511,32 @@ ], "expression": { "argumentTypes": null, - "id": 1064, + "id": 1063, "name": "balanceAfter", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "8330:12:1", + "referencedDeclaration": 1051, + "src": "8466:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1065, + "id": 1064, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1794, - "src": "8330:16:1", + "referencedDeclaration": 1801, + "src": "8466:16:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 1067, + "id": 1066, "isConstant": false, "isLValue": false, "isPure": false, @@ -10525,39 +10544,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8330:31:1", + "src": "8466:31:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "8321:40:1", + "src": "8457:40:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1069, + "id": 1068, "nodeType": "ExpressionStatement", - "src": "8321:40:1" + "src": "8457:40:1" }, { "expression": { "argumentTypes": null, - "id": 1078, + "id": 1077, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1070, + "id": 1069, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "8375:13:1", + "referencedDeclaration": 994, + "src": "8511:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -10573,12 +10592,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1075, + "id": 1074, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "8407:5:1", + "referencedDeclaration": 969, + "src": "8543:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10592,29 +10611,29 @@ "typeString": "address" } ], - "id": 1074, + "id": 1073, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8399:7:1", + "src": "8535:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1073, + "id": 1072, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8399:7:1", + "src": "8535:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1076, + "id": 1075, "isConstant": false, "isLValue": false, "isPure": false, @@ -10622,7 +10641,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8399:14:1", + "src": "8535:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -10637,29 +10656,29 @@ "typeString": "uint256" } ], - "id": 1072, + "id": 1071, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8391:7:1", + "src": "8527:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1071, + "id": 1070, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8391:7:1", + "src": "8527:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1077, + "id": 1076, "isConstant": false, "isLValue": false, "isPure": false, @@ -10667,32 +10686,32 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8391:23:1", + "src": "8527:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "src": "8375:39:1", + "src": "8511:39:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 1079, + "id": 1078, "nodeType": "ExpressionStatement", - "src": "8375:39:1" + "src": "8511:39:1" } ] }, - "id": 1081, + "id": 1080, "nodeType": "IfStatement", - "src": "7660:765:1", + "src": "7796:765:1", "trueBody": { - "id": 1025, + "id": 1024, "nodeType": "Block", - "src": "7687:193:1", + "src": "7823:193:1", "statements": [ { "expression": { @@ -10702,18 +10721,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1004, + "id": 1003, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "7726:3:1", + "src": "7862:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1005, + "id": 1004, "isConstant": false, "isLValue": false, "isPure": false, @@ -10721,7 +10740,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "7726:10:1", + "src": "7862:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -10729,12 +10748,12 @@ }, { "argumentTypes": null, - "id": 1006, + "id": 1005, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "7738:6:1", + "referencedDeclaration": 971, + "src": "7874:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10757,12 +10776,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1001, + "id": 1000, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7714:5:1", + "referencedDeclaration": 969, + "src": "7850:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10776,18 +10795,18 @@ "typeString": "address" } ], - "id": 1000, + "id": 999, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7701:12:1", + "referencedDeclaration": 1732, + "src": "7837:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1002, + "id": 1001, "isConstant": false, "isLValue": false, "isPure": false, @@ -10795,28 +10814,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7701:19:1", + "src": "7837:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1003, + "id": 1002, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "burn", "nodeType": "MemberAccess", - "referencedDeclaration": 1284, - "src": "7701:24:1", + "referencedDeclaration": 1291, + "src": "7837:24:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256) external" } }, - "id": 1007, + "id": 1006, "isConstant": false, "isLValue": false, "isPure": false, @@ -10824,33 +10843,33 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7701:44:1", + "src": "7837:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1008, + "id": 1007, "nodeType": "ExpressionStatement", - "src": "7701:44:1" + "src": "7837:44:1" }, { "expression": { "argumentTypes": null, - "id": 1015, + "id": 1014, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1009, + "id": 1008, "name": "asset_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "7759:11:1", + "referencedDeclaration": 990, + "src": "7895:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -10868,12 +10887,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1011, + "id": 1010, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7786:5:1", + "referencedDeclaration": 969, + "src": "7922:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10887,18 +10906,18 @@ "typeString": "address" } ], - "id": 1010, + "id": 1009, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7773:12:1", + "referencedDeclaration": 1732, + "src": "7909:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1012, + "id": 1011, "isConstant": false, "isLValue": false, "isPure": false, @@ -10906,28 +10925,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7773:19:1", + "src": "7909:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1013, + "id": 1012, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "assetChain", "nodeType": "MemberAccess", - "referencedDeclaration": 1193, - "src": "7773:30:1", + "referencedDeclaration": 1198, + "src": "7909:30:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", "typeString": "function () view external returns (uint8)" } }, - "id": 1014, + "id": 1013, "isConstant": false, "isLValue": false, "isPure": false, @@ -10935,39 +10954,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7773:32:1", + "src": "7909:32:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "7759:46:1", + "src": "7895:46:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "id": 1016, + "id": 1015, "nodeType": "ExpressionStatement", - "src": "7759:46:1" + "src": "7895:46:1" }, { "expression": { "argumentTypes": null, - "id": 1023, + "id": 1022, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1017, + "id": 1016, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "7819:13:1", + "referencedDeclaration": 994, + "src": "7955:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -10985,12 +11004,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1019, + "id": 1018, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7848:5:1", + "referencedDeclaration": 969, + "src": "7984:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11004,18 +11023,18 @@ "typeString": "address" } ], - "id": 1018, + "id": 1017, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7835:12:1", + "referencedDeclaration": 1732, + "src": "7971:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1020, + "id": 1019, "isConstant": false, "isLValue": false, "isPure": false, @@ -11023,28 +11042,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7835:19:1", + "src": "7971:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1021, + "id": 1020, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "assetAddress", "nodeType": "MemberAccess", - "referencedDeclaration": 1195, - "src": "7835:32:1", + "referencedDeclaration": 1200, + "src": "7971:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", "typeString": "function () view external returns (bytes32)" } }, - "id": 1022, + "id": 1021, "isConstant": false, "isLValue": false, "isPure": false, @@ -11052,22 +11071,22 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7835:34:1", + "src": "7971:34:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "src": "7819:50:1", + "src": "7955:50:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 1024, + "id": 1023, "nodeType": "ExpressionStatement", - "src": "7819:50:1" + "src": "7955:50:1" } ] } @@ -11078,12 +11097,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1083, + "id": 1082, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "8456:12:1", + "referencedDeclaration": 975, + "src": "8592:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -11091,12 +11110,12 @@ }, { "argumentTypes": null, - "id": 1084, + "id": 1083, "name": "asset_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "8470:11:1", + "referencedDeclaration": 990, + "src": "8606:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -11104,12 +11123,96 @@ }, { "argumentTypes": null, - "id": 1085, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1085, + "name": "asset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 969, + "src": "8625:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1084, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2458, + "src": "8619:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$2458_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8619:12:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$2458", + "typeString": "contract ERC20" + } + }, + "id": 1087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2034, + "src": "8619:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", + "typeString": "function () view external returns (uint8)" + } + }, + "id": 1088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8619:23:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1089, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "8483:13:1", + "referencedDeclaration": 994, + "src": "8644:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -11125,18 +11228,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1090, + "id": 1094, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8514:3:1", + "src": "8675:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1091, + "id": 1095, "isConstant": false, "isLValue": false, "isPure": false, @@ -11144,7 +11247,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8514:10:1", + "src": "8675:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -11158,29 +11261,29 @@ "typeString": "address payable" } ], - "id": 1089, + "id": 1093, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8506:7:1", + "src": "8667:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1088, + "id": 1092, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8506:7:1", + "src": "8667:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1092, + "id": 1096, "isConstant": false, "isLValue": false, "isPure": false, @@ -11188,7 +11291,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8506:19:1", + "src": "8667:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -11203,29 +11306,29 @@ "typeString": "uint256" } ], - "id": 1087, + "id": 1091, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8498:7:1", + "src": "8659:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1086, + "id": 1090, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8498:7:1", + "src": "8659:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1093, + "id": 1097, "isConstant": false, "isLValue": false, "isPure": false, @@ -11233,7 +11336,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8498:28:1", + "src": "8659:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -11242,12 +11345,12 @@ }, { "argumentTypes": null, - "id": 1094, + "id": 1098, "name": "recipient", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 974, - "src": "8528:9:1", + "referencedDeclaration": 973, + "src": "8689:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -11255,12 +11358,12 @@ }, { "argumentTypes": null, - "id": 1095, + "id": 1099, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8539:6:1", + "referencedDeclaration": 971, + "src": "8700:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11268,12 +11371,12 @@ }, { "argumentTypes": null, - "id": 1096, + "id": 1100, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 978, - "src": "8547:5:1", + "referencedDeclaration": 977, + "src": "8708:5:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -11290,6 +11393,10 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -11311,18 +11418,18 @@ "typeString": "uint32" } ], - "id": 1082, + "id": 1081, "name": "LogTokensLocked", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 389, - "src": "8440:15:1", + "referencedDeclaration": 392, + "src": "8576:15:1", "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", - "typeString": "function (uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" + "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", + "typeString": "function (uint8,uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" } }, - "id": 1097, + "id": 1101, "isConstant": false, "isLValue": false, "isPure": false, @@ -11330,61 +11437,61 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8440:113:1", + "src": "8576:138:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1098, + "id": 1102, "nodeType": "EmitStatement", - "src": "8435:118:1" + "src": "8571:143:1" } ] }, "documentation": null, "functionSelector": "13cca1a9", - "id": 1100, + "id": 1104, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 981, + "id": 980, "modifierName": { "argumentTypes": null, - "id": 980, + "id": 979, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "7513:12:1", + "referencedDeclaration": 2992, + "src": "7649:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7513:12:1" + "src": "7649:12:1" } ], "name": "lockAssets", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 979, + "id": 978, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 970, + "id": 969, "mutability": "mutable", "name": "asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7385:13:1", + "scope": 1104, + "src": "7521:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11392,10 +11499,10 @@ "typeString": "address" }, "typeName": { - "id": 969, + "id": 968, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7385:7:1", + "src": "7521:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -11407,13 +11514,13 @@ }, { "constant": false, - "id": 972, + "id": 971, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7408:14:1", + "scope": 1104, + "src": "7544:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11421,10 +11528,10 @@ "typeString": "uint256" }, "typeName": { - "id": 971, + "id": 970, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7408:7:1", + "src": "7544:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11435,13 +11542,13 @@ }, { "constant": false, - "id": 974, + "id": 973, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7432:17:1", + "scope": 1104, + "src": "7568:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11449,10 +11556,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 973, + "id": 972, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7432:7:1", + "src": "7568:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -11463,13 +11570,13 @@ }, { "constant": false, - "id": 976, + "id": 975, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7459:18:1", + "scope": 1104, + "src": "7595:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11477,10 +11584,10 @@ "typeString": "uint8" }, "typeName": { - "id": 975, + "id": 974, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "7459:5:1", + "src": "7595:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -11491,13 +11598,13 @@ }, { "constant": false, - "id": 978, + "id": 977, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7487:12:1", + "scope": 1104, + "src": "7623:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11505,10 +11612,10 @@ "typeString": "uint32" }, "typeName": { - "id": 977, + "id": 976, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "7487:6:1", + "src": "7623:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -11518,25 +11625,25 @@ "visibility": "internal" } ], - "src": "7375:130:1" + "src": "7511:130:1" }, "returnParameters": { - "id": 982, + "id": 981, "nodeType": "ParameterList", "parameters": [], - "src": "7526:0:1" + "src": "7662:0:1" }, - "scope": 1170, - "src": "7356:1204:1", + "scope": 1175, + "src": "7492:1229:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 1152, + "id": 1157, "nodeType": "Block", - "src": "8694:330:1", + "src": "8855:334:1", "statements": [ { "expression": { @@ -11548,7 +11655,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1115, + "id": 1119, "isConstant": false, "isLValue": false, "isPure": false, @@ -11557,18 +11664,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1112, + "id": 1116, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8712:3:1", + "src": "8873:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1113, + "id": 1117, "isConstant": false, "isLValue": false, "isPure": false, @@ -11576,7 +11683,7 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8712:9:1", + "src": "8873:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11587,14 +11694,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1114, + "id": 1118, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8725:1:1", + "src": "8886:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11602,7 +11709,7 @@ }, "value": "0" }, - "src": "8712:14:1", + "src": "8873:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11611,14 +11718,14 @@ { "argumentTypes": null, "hexValue": "616d6f756e74206d757374206e6f742062652030", - "id": 1116, + "id": 1120, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8728:22:1", + "src": "8889:22:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c3143f59cb0e580c5873dd9b2860385487237680573a0afd40e8c0860e76a5d3", @@ -11638,7 +11745,7 @@ "typeString": "literal_string \"amount must not be 0\"" } ], - "id": 1111, + "id": 1115, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -11646,13 +11753,13 @@ -18 ], "referencedDeclaration": -18, - "src": "8704:7:1", + "src": "8865:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1117, + "id": 1121, "isConstant": false, "isLValue": false, "isPure": false, @@ -11660,16 +11767,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8704:47:1", + "src": "8865:47:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1118, + "id": 1122, "nodeType": "ExpressionStatement", - "src": "8704:47:1" + "src": "8865:47:1" }, { "expression": { @@ -11684,12 +11791,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1120, + "id": 1124, "name": "WETHAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "8800:11:1", + "referencedDeclaration": 362, + "src": "8961:11:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11703,18 +11810,18 @@ "typeString": "address" } ], - "id": 1119, + "id": 1123, "name": "WETH", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "8795:4:1", + "referencedDeclaration": 1186, + "src": "8956:4:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WETH_$1181_$", + "typeIdentifier": "t_type$_t_contract$_WETH_$1186_$", "typeString": "type(contract WETH)" } }, - "id": 1121, + "id": 1125, "isConstant": false, "isLValue": false, "isPure": true, @@ -11722,28 +11829,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8795:17:1", + "src": "8956:17:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WETH_$1181", + "typeIdentifier": "t_contract$_WETH_$1186", "typeString": "contract WETH" } }, - "id": 1122, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "deposit", "nodeType": "MemberAccess", - "referencedDeclaration": 1175, - "src": "8795:25:1", + "referencedDeclaration": 1180, + "src": "8956:25:1", "typeDescriptions": { "typeIdentifier": "t_function_external_payable$__$returns$__$", "typeString": "function () payable external" } }, - "id": 1125, + "id": 1129, "isConstant": false, "isLValue": false, "isPure": false, @@ -11757,18 +11864,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1123, + "id": 1127, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8829:3:1", + "src": "8990:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1124, + "id": 1128, "isConstant": false, "isLValue": false, "isPure": false, @@ -11776,20 +11883,20 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8829:9:1", + "src": "8990:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "src": "8795:44:1", + "src": "8956:44:1", "typeDescriptions": { "typeIdentifier": "t_function_external_payable$__$returns$__$value", "typeString": "function () payable external" } }, - "id": 1126, + "id": 1130, "isConstant": false, "isLValue": false, "isPure": false, @@ -11797,16 +11904,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8795:46:1", + "src": "8956:46:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1127, + "id": 1131, "nodeType": "ExpressionStatement", - "src": "8795:46:1" + "src": "8956:46:1" }, { "eventCall": { @@ -11814,12 +11921,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1129, + "id": 1133, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1104, - "src": "8904:12:1", + "referencedDeclaration": 1108, + "src": "9065:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -11827,17 +11934,35 @@ }, { "argumentTypes": null, - "id": 1130, + "id": 1134, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "8918:8:1", + "referencedDeclaration": 359, + "src": "9079:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, + { + "argumentTypes": null, + "hexValue": "3138", + "id": 1135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9089:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, { "argumentTypes": null, "arguments": [ @@ -11846,12 +11971,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1135, + "id": 1140, "name": "WETHAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "8944:11:1", + "referencedDeclaration": 362, + "src": "9109:11:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11865,29 +11990,29 @@ "typeString": "address" } ], - "id": 1134, + "id": 1139, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8936:7:1", + "src": "9101:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1133, + "id": 1138, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8936:7:1", + "src": "9101:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1136, + "id": 1141, "isConstant": false, "isLValue": false, "isPure": true, @@ -11895,7 +12020,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8936:20:1", + "src": "9101:20:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -11910,29 +12035,29 @@ "typeString": "uint256" } ], - "id": 1132, + "id": 1137, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8928:7:1", + "src": "9093:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1131, + "id": 1136, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8928:7:1", + "src": "9093:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1137, + "id": 1142, "isConstant": false, "isLValue": false, "isPure": true, @@ -11940,7 +12065,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8928:29:1", + "src": "9093:29:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -11957,18 +12082,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1142, + "id": 1147, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8975:3:1", + "src": "9140:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1143, + "id": 1148, "isConstant": false, "isLValue": false, "isPure": false, @@ -11976,7 +12101,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8975:10:1", + "src": "9140:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -11990,29 +12115,29 @@ "typeString": "address payable" } ], - "id": 1141, + "id": 1146, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8967:7:1", + "src": "9132:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1140, + "id": 1145, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8967:7:1", + "src": "9132:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1144, + "id": 1149, "isConstant": false, "isLValue": false, "isPure": false, @@ -12020,7 +12145,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8967:19:1", + "src": "9132:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -12035,29 +12160,29 @@ "typeString": "uint256" } ], - "id": 1139, + "id": 1144, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8959:7:1", + "src": "9124:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1138, + "id": 1143, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8959:7:1", + "src": "9124:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1145, + "id": 1150, "isConstant": false, "isLValue": false, "isPure": false, @@ -12065,7 +12190,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8959:28:1", + "src": "9124:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -12074,12 +12199,12 @@ }, { "argumentTypes": null, - "id": 1146, + "id": 1151, "name": "recipient", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, - "src": "8989:9:1", + "referencedDeclaration": 1106, + "src": "9154:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12089,18 +12214,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1147, + "id": 1152, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "9000:3:1", + "src": "9165:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1148, + "id": 1153, "isConstant": false, "isLValue": false, "isPure": false, @@ -12108,7 +12233,7 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9000:9:1", + "src": "9165:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12116,12 +12241,12 @@ }, { "argumentTypes": null, - "id": 1149, + "id": 1154, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "9011:5:1", + "referencedDeclaration": 1110, + "src": "9176:5:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -12138,6 +12263,10 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12159,18 +12288,18 @@ "typeString": "uint32" } ], - "id": 1128, + "id": 1132, "name": "LogTokensLocked", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 389, - "src": "8888:15:1", + "referencedDeclaration": 392, + "src": "9049:15:1", "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", - "typeString": "function (uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" + "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", + "typeString": "function (uint8,uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" } }, - "id": 1150, + "id": 1155, "isConstant": false, "isLValue": false, "isPure": false, @@ -12178,61 +12307,61 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8888:129:1", + "src": "9049:133:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1151, + "id": 1156, "nodeType": "EmitStatement", - "src": "8883:134:1" + "src": "9044:138:1" } ] }, "documentation": null, "functionSelector": "58d62e46", - "id": 1153, + "id": 1158, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 1109, + "id": 1113, "modifierName": { "argumentTypes": null, - "id": 1108, + "id": 1112, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "8681:12:1", + "referencedDeclaration": 2992, + "src": "8842:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8681:12:1" + "src": "8842:12:1" } ], "name": "lockETH", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1107, + "id": 1111, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1102, + "id": 1106, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8592:17:1", + "scope": 1158, + "src": "8753:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12240,10 +12369,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 1101, + "id": 1105, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8592:7:1", + "src": "8753:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12254,13 +12383,13 @@ }, { "constant": false, - "id": 1104, + "id": 1108, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8619:18:1", + "scope": 1158, + "src": "8780:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12268,10 +12397,10 @@ "typeString": "uint8" }, "typeName": { - "id": 1103, + "id": 1107, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "8619:5:1", + "src": "8780:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -12282,13 +12411,13 @@ }, { "constant": false, - "id": 1106, + "id": 1110, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8647:12:1", + "scope": 1158, + "src": "8808:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12296,10 +12425,10 @@ "typeString": "uint32" }, "typeName": { - "id": 1105, + "id": 1109, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "8647:6:1", + "src": "8808:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -12309,25 +12438,25 @@ "visibility": "internal" } ], - "src": "8582:83:1" + "src": "8743:83:1" }, "returnParameters": { - "id": 1110, + "id": 1114, "nodeType": "ParameterList", "parameters": [], - "src": "8694:0:1" + "src": "8855:0:1" }, - "scope": 1170, - "src": "8566:458:1", + "scope": 1175, + "src": "8727:462:1", "stateMutability": "payable", "virtual": false, "visibility": "public" }, { "body": { - "id": 1160, + "id": 1165, "nodeType": "Block", - "src": "9055:57:1", + "src": "9220:57:1", "statements": [ { "expression": { @@ -12336,14 +12465,14 @@ { "argumentTypes": null, "hexValue": "706c6561736520757365206c6f636b45544820746f207472616e736665722045544820746f20536f6c616e61", - "id": 1157, + "id": 1162, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9063:46:1", + "src": "9228:46:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_414957345d33678f377f3c67303c55f683553546e00bb5a8689e656385e6efb2", @@ -12359,7 +12488,7 @@ "typeString": "literal_string \"please use lockETH to transfer ETH to Solana\"" } ], - "id": 1156, + "id": 1161, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -12367,13 +12496,13 @@ -19 ], "referencedDeclaration": -19, - "src": "9056:6:1", + "src": "9221:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 1158, + "id": 1163, "isConstant": false, "isLValue": false, "isPure": false, @@ -12381,21 +12510,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9056:54:1", + "src": "9221:54:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1159, + "id": 1164, "nodeType": "ExpressionStatement", - "src": "9056:54:1" + "src": "9221:54:1" } ] }, "documentation": null, - "id": 1161, + "id": 1166, "implemented": true, "kind": "fallback", "modifiers": [], @@ -12403,28 +12532,28 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1154, + "id": 1159, "nodeType": "ParameterList", "parameters": [], - "src": "9035:2:1" + "src": "9200:2:1" }, "returnParameters": { - "id": 1155, + "id": 1160, "nodeType": "ParameterList", "parameters": [], - "src": "9055:0:1" + "src": "9220:0:1" }, - "scope": 1170, - "src": "9027:85:1", + "scope": 1175, + "src": "9192:85:1", "stateMutability": "payable", "virtual": false, "visibility": "external" }, { "body": { - "id": 1168, + "id": 1173, "nodeType": "Block", - "src": "9140:57:1", + "src": "9305:57:1", "statements": [ { "expression": { @@ -12433,14 +12562,14 @@ { "argumentTypes": null, "hexValue": "706c6561736520757365206c6f636b45544820746f207472616e736665722045544820746f20536f6c616e61", - "id": 1165, + "id": 1170, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9148:46:1", + "src": "9313:46:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_414957345d33678f377f3c67303c55f683553546e00bb5a8689e656385e6efb2", @@ -12456,7 +12585,7 @@ "typeString": "literal_string \"please use lockETH to transfer ETH to Solana\"" } ], - "id": 1164, + "id": 1169, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -12464,13 +12593,13 @@ -19 ], "referencedDeclaration": -19, - "src": "9141:6:1", + "src": "9306:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 1166, + "id": 1171, "isConstant": false, "isLValue": false, "isPure": false, @@ -12478,21 +12607,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9141:54:1", + "src": "9306:54:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1167, + "id": 1172, "nodeType": "ExpressionStatement", - "src": "9141:54:1" + "src": "9306:54:1" } ] }, "documentation": null, - "id": 1169, + "id": 1174, "implemented": true, "kind": "receive", "modifiers": [], @@ -12500,26 +12629,26 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1162, + "id": 1167, "nodeType": "ParameterList", "parameters": [], - "src": "9120:2:1" + "src": "9285:2:1" }, "returnParameters": { - "id": 1163, + "id": 1168, "nodeType": "ParameterList", "parameters": [], - "src": "9140:0:1" + "src": "9305:0:1" }, - "scope": 1170, - "src": "9113:84:1", + "scope": 1175, + "src": "9278:84:1", "stateMutability": "payable", "virtual": false, "visibility": "external" } ], - "scope": 1182, - "src": "446:8753:1" + "scope": 1187, + "src": "502:8862:1" }, { "abstract": false, @@ -12528,31 +12657,31 @@ "arguments": null, "baseName": { "contractScope": null, - "id": 1171, + "id": 1176, "name": "IERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2022, - "src": "9220:6:1", + "referencedDeclaration": 2536, + "src": "9385:6:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1172, + "id": 1177, "nodeType": "InheritanceSpecifier", - "src": "9220:6:1" + "src": "9385:6:1" } ], "contractDependencies": [ - 2022 + 2536 ], "contractKind": "interface", "documentation": null, "fullyImplemented": false, - "id": 1181, + "id": 1186, "linearizedBaseContracts": [ - 1181, - 2022 + 1186, + 2536 ], "name": "WETH", "nodeType": "ContractDefinition", @@ -12561,7 +12690,7 @@ "body": null, "documentation": null, "functionSelector": "d0e30db0", - "id": 1175, + "id": 1180, "implemented": false, "kind": "function", "modifiers": [], @@ -12569,19 +12698,19 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1173, + "id": 1178, "nodeType": "ParameterList", "parameters": [], - "src": "9245:2:1" + "src": "9410:2:1" }, "returnParameters": { - "id": 1174, + "id": 1179, "nodeType": "ParameterList", "parameters": [], - "src": "9264:0:1" + "src": "9429:0:1" }, - "scope": 1181, - "src": "9229:36:1", + "scope": 1186, + "src": "9394:36:1", "stateMutability": "payable", "virtual": false, "visibility": "external" @@ -12590,7 +12719,7 @@ "body": null, "documentation": null, "functionSelector": "2e1a7d4d", - "id": 1180, + "id": 1185, "implemented": false, "kind": "function", "modifiers": [], @@ -12598,18 +12727,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1178, + "id": 1183, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1177, + "id": 1182, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1180, - "src": "9285:14:1", + "scope": 1185, + "src": "9450:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12617,10 +12746,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1176, + "id": 1181, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9285:7:1", + "src": "9450:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12630,38 +12759,38 @@ "visibility": "internal" } ], - "src": "9284:16:1" + "src": "9449:16:1" }, "returnParameters": { - "id": 1179, + "id": 1184, "nodeType": "ParameterList", "parameters": [], - "src": "9309:0:1" + "src": "9474:0:1" }, - "scope": 1181, - "src": "9267:43:1", + "scope": 1186, + "src": "9432:43:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" } ], - "scope": 1182, - "src": "9202:110:1" + "scope": 1187, + "src": "9367:110:1" } ], - "src": "103:9210:1" + "src": "103:9375:1" }, "legacyAST": { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/Wormhole.sol", "exportedSymbols": { "WETH": [ - 1181 + 1186 ], "Wormhole": [ - 1170 + 1175 ] }, - "id": 1182, + "id": 1187, "license": "Apache 2", "nodeType": "SourceUnit", "nodes": [ @@ -12686,68 +12815,79 @@ "src": "127:33:1" }, { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol", "id": 337, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2023, - "src": "162:56:1", + "scope": 1187, + "sourceUnit": 2459, + "src": "162:55:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "id": 338, + "nodeType": "ImportDirective", + "scope": 1187, + "sourceUnit": 2537, + "src": "218:56:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol", "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol", - "id": 338, + "id": 339, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2236, - "src": "219:59:1", + "scope": 1187, + "sourceUnit": 2750, + "src": "275:59:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol", "file": "@openzeppelin/contracts/math/SafeMath.sol", - "id": 339, + "id": 340, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 1945, - "src": "279:51:1", + "scope": 1187, + "sourceUnit": 1952, + "src": "335:51:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "id": 340, + "id": 341, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 2480, - "src": "331:59:1", + "scope": 1187, + "sourceUnit": 2994, + "src": "387:59:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/BytesLib.sol", "file": "./BytesLib.sol", - "id": 341, + "id": 342, "nodeType": "ImportDirective", - "scope": 1182, + "scope": 1187, "sourceUnit": 334, - "src": "391:24:1", + "src": "447:24:1", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/home/hhofstadt/Dev/certus/wormhole/ethereum/contracts/WrappedAsset.sol", "file": "./WrappedAsset.sol", - "id": 342, + "id": 343, "nodeType": "ImportDirective", - "scope": 1182, - "sourceUnit": 1726, - "src": "416:28:1", + "scope": 1187, + "sourceUnit": 1733, + "src": "472:28:1", "symbolAliases": [], "unitAlias": "" }, @@ -12758,85 +12898,85 @@ "arguments": null, "baseName": { "contractScope": null, - "id": 343, + "id": 344, "name": "ReentrancyGuard", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2479, - "src": "467:15:1", + "referencedDeclaration": 2993, + "src": "523:15:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ReentrancyGuard_$2479", + "typeIdentifier": "t_contract$_ReentrancyGuard_$2993", "typeString": "contract ReentrancyGuard" } }, - "id": 344, + "id": 345, "nodeType": "InheritanceSpecifier", - "src": "467:15:1" + "src": "523:15:1" } ], "contractDependencies": [ - 2479 + 2993 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1170, + "id": 1175, "linearizedBaseContracts": [ - 1170, - 2479 + 1175, + 2993 ], "name": "Wormhole", "nodeType": "ContractDefinition", "nodes": [ { - "id": 347, + "id": 348, "libraryName": { "contractScope": null, - "id": 345, + "id": 346, "name": "SafeERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2235, - "src": "495:9:1", + "referencedDeclaration": 2749, + "src": "551:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$2235", + "typeIdentifier": "t_contract$_SafeERC20_$2749", "typeString": "library SafeERC20" } }, "nodeType": "UsingForDirective", - "src": "489:27:1", + "src": "545:27:1", "typeName": { "contractScope": null, - "id": 346, + "id": 347, "name": "IERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2022, - "src": "509:6:1", + "referencedDeclaration": 2536, + "src": "565:6:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } } }, { - "id": 350, + "id": 351, "libraryName": { "contractScope": null, - "id": 348, + "id": 349, "name": "BytesLib", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 333, - "src": "527:8:1", + "src": "583:8:1", "typeDescriptions": { "typeIdentifier": "t_contract$_BytesLib_$333", "typeString": "library BytesLib" } }, "nodeType": "UsingForDirective", - "src": "521:25:1", + "src": "577:25:1", "typeName": { - "id": 349, + "id": 350, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "540:5:1", + "src": "596:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -12844,26 +12984,26 @@ } }, { - "id": 353, + "id": 354, "libraryName": { "contractScope": null, - "id": 351, + "id": 352, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1944, - "src": "557:8:1", + "referencedDeclaration": 1951, + "src": "613:8:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1944", + "typeIdentifier": "t_contract$_SafeMath_$1951", "typeString": "library SafeMath" } }, "nodeType": "UsingForDirective", - "src": "551:27:1", + "src": "607:27:1", "typeName": { - "id": 352, + "id": 353, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "570:7:1", + "src": "626:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12873,13 +13013,13 @@ { "constant": false, "functionSelector": "99da1d3c", - "id": 355, + "id": 356, "mutability": "mutable", "name": "wrappedAssetMaster", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "629:33:1", + "scope": 1175, + "src": "685:33:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -12887,10 +13027,10 @@ "typeString": "address" }, "typeName": { - "id": 354, + "id": 355, "name": "address", "nodeType": "ElementaryTypeName", - "src": "629:7:1", + "src": "685:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12902,13 +13042,13 @@ }, { "constant": false, - "id": 358, + "id": 359, "mutability": "mutable", "name": "CHAIN_ID", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "697:18:1", + "scope": 1175, + "src": "753:18:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -12916,10 +13056,10 @@ "typeString": "uint8" }, "typeName": { - "id": 356, + "id": 357, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "697:5:1", + "src": "753:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -12928,14 +13068,14 @@ "value": { "argumentTypes": null, "hexValue": "32", - "id": 357, + "id": 358, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "714:1:1", + "src": "770:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -12947,13 +13087,13 @@ }, { "constant": true, - "id": 361, + "id": 362, "mutability": "constant", "name": "WETHAddress", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "767:73:1", + "scope": 1175, + "src": "823:73:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -12961,10 +13101,10 @@ "typeString": "address" }, "typeName": { - "id": 359, + "id": 360, "name": "address", "nodeType": "ElementaryTypeName", - "src": "767:7:1", + "src": "823:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12974,14 +13114,14 @@ "value": { "argumentTypes": null, "hexValue": "307843303261614133396232323346453844304130653543344632376541443930383343373536436332", - "id": 360, + "id": 361, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "798:42:1", + "src": "854:42:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -12993,17 +13133,17 @@ }, { "canonicalName": "Wormhole.GuardianSet", - "id": 367, + "id": 368, "members": [ { "constant": false, - "id": 364, + "id": 365, "mutability": "mutable", "name": "keys", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 367, - "src": "876:14:1", + "scope": 368, + "src": "932:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13012,20 +13152,20 @@ }, "typeName": { "baseType": { - "id": 362, + "id": 363, "name": "address", "nodeType": "ElementaryTypeName", - "src": "876:7:1", + "src": "932:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 363, + "id": 364, "length": null, "nodeType": "ArrayTypeName", - "src": "876:9:1", + "src": "932:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -13036,13 +13176,13 @@ }, { "constant": false, - "id": 366, + "id": 367, "mutability": "mutable", "name": "expiration_time", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 367, - "src": "900:22:1", + "scope": 368, + "src": "956:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13050,10 +13190,10 @@ "typeString": "uint32" }, "typeName": { - "id": 365, + "id": 366, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "900:6:1", + "src": "956:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13065,30 +13205,30 @@ ], "name": "GuardianSet", "nodeType": "StructDefinition", - "scope": 1170, - "src": "847:82:1", + "scope": 1175, + "src": "903:82:1", "visibility": "public" }, { "anonymous": false, "documentation": null, - "id": 373, + "id": 374, "name": "LogGuardianSetChanged", "nodeType": "EventDefinition", "parameters": { - "id": 372, + "id": 373, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 369, + "id": 370, "indexed": false, "mutability": "mutable", "name": "oldGuardianIndex", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 373, - "src": "972:23:1", + "scope": 374, + "src": "1028:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13096,10 +13236,10 @@ "typeString": "uint32" }, "typeName": { - "id": 368, + "id": 369, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "972:6:1", + "src": "1028:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13110,14 +13250,14 @@ }, { "constant": false, - "id": 371, + "id": 372, "indexed": false, "mutability": "mutable", "name": "newGuardianIndex", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 373, - "src": "1005:23:1", + "scope": 374, + "src": "1061:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13125,10 +13265,10 @@ "typeString": "uint32" }, "typeName": { - "id": 370, + "id": 371, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1005:6:1", + "src": "1061:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13138,30 +13278,30 @@ "visibility": "internal" } ], - "src": "962:72:1" + "src": "1018:72:1" }, - "src": "935:100:1" + "src": "991:100:1" }, { "anonymous": false, "documentation": null, - "id": 389, + "id": 392, "name": "LogTokensLocked", "nodeType": "EventDefinition", "parameters": { - "id": 388, + "id": 391, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 375, + "id": 376, "indexed": false, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1072:18:1", + "scope": 392, + "src": "1128:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13169,10 +13309,10 @@ "typeString": "uint8" }, "typeName": { - "id": 374, + "id": 375, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "1072:5:1", + "src": "1128:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -13183,14 +13323,14 @@ }, { "constant": false, - "id": 377, + "id": 378, "indexed": false, "mutability": "mutable", "name": "token_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1100:17:1", + "scope": 392, + "src": "1156:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13198,10 +13338,10 @@ "typeString": "uint8" }, "typeName": { - "id": 376, + "id": 377, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "1100:5:1", + "src": "1156:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -13212,14 +13352,43 @@ }, { "constant": false, - "id": 379, + "id": 380, + "indexed": false, + "mutability": "mutable", + "name": "token_decimals", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 392, + "src": "1183:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 379, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1183:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 382, "indexed": true, "mutability": "mutable", "name": "token", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1127:21:1", + "scope": 392, + "src": "1213:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13227,10 +13396,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 378, + "id": 381, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1127:7:1", + "src": "1213:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -13241,14 +13410,14 @@ }, { "constant": false, - "id": 381, + "id": 384, "indexed": true, "mutability": "mutable", "name": "sender", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1158:22:1", + "scope": 392, + "src": "1244:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13256,10 +13425,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 380, + "id": 383, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1158:7:1", + "src": "1244:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -13270,14 +13439,14 @@ }, { "constant": false, - "id": 383, + "id": 386, "indexed": false, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1190:17:1", + "scope": 392, + "src": "1276:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13285,10 +13454,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 382, + "id": 385, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1190:7:1", + "src": "1276:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -13299,14 +13468,14 @@ }, { "constant": false, - "id": 385, + "id": 388, "indexed": false, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1217:14:1", + "scope": 392, + "src": "1303:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13314,10 +13483,10 @@ "typeString": "uint256" }, "typeName": { - "id": 384, + "id": 387, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1217:7:1", + "src": "1303:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13328,14 +13497,14 @@ }, { "constant": false, - "id": 387, + "id": 390, "indexed": false, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 389, - "src": "1241:12:1", + "scope": 392, + "src": "1327:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13343,10 +13512,10 @@ "typeString": "uint32" }, "typeName": { - "id": 386, + "id": 389, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1241:6:1", + "src": "1327:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13356,53 +13525,53 @@ "visibility": "internal" } ], - "src": "1062:197:1" + "src": "1118:227:1" }, - "src": "1041:219:1" + "src": "1097:249:1" }, { "constant": false, "functionSelector": "42b0aefa", - "id": 393, + "id": 396, "mutability": "mutable", "name": "guardian_sets", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1319:51:1", + "scope": 1175, + "src": "1405:51:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet)" }, "typeName": { - "id": 392, + "id": 395, "keyType": { - "id": 390, + "id": 393, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1327:6:1", + "src": "1413:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, "nodeType": "Mapping", - "src": "1319:30:1", + "src": "1405:30:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet)" }, "valueType": { "contractScope": null, - "id": 391, + "id": 394, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "1337:11:1", + "referencedDeclaration": 368, + "src": "1423:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } } @@ -13413,13 +13582,13 @@ { "constant": false, "functionSelector": "822d82b3", - "id": 395, + "id": 398, "mutability": "mutable", "name": "guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1411:32:1", + "scope": 1175, + "src": "1497:32:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -13427,10 +13596,10 @@ "typeString": "uint32" }, "typeName": { - "id": 394, + "id": 397, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1411:6:1", + "src": "1497:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13441,14 +13610,14 @@ }, { "constant": false, - "functionSelector": "7f04d9e6", - "id": 397, + "functionSelector": "4db47840", + "id": 400, "mutability": "mutable", - "name": "vaa_expiry", + "name": "guardian_set_expirity", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1501:24:1", + "scope": 1175, + "src": "1615:35:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -13456,10 +13625,10 @@ "typeString": "uint32" }, "typeName": { - "id": 396, + "id": 399, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1501:6:1", + "src": "1615:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13470,13 +13639,14 @@ }, { "constant": false, - "id": 401, + "functionSelector": "a31fe409", + "id": 404, "mutability": "mutable", "name": "consumedVAAs", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1571:37:1", + "scope": 1175, + "src": "1696:44:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -13484,28 +13654,28 @@ "typeString": "mapping(bytes32 => bool)" }, "typeName": { - "id": 400, + "id": 403, "keyType": { - "id": 398, + "id": 401, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1579:7:1", + "src": "1704:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1571:24:1", + "src": "1696:24:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" }, "valueType": { - "id": 399, + "id": 402, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "1590:4:1", + "src": "1715:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13513,18 +13683,18 @@ } }, "value": null, - "visibility": "internal" + "visibility": "public" }, { "constant": false, "functionSelector": "b6694c2a", - "id": 405, + "id": 408, "mutability": "mutable", "name": "wrappedAssets", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1663:48:1", + "scope": 1175, + "src": "1795:48:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -13532,28 +13702,28 @@ "typeString": "mapping(bytes32 => address)" }, "typeName": { - "id": 404, + "id": 407, "keyType": { - "id": 402, + "id": 405, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1671:7:1", + "src": "1803:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1663:27:1", + "src": "1795:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" }, "valueType": { - "id": 403, + "id": 406, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1682:7:1", + "src": "1814:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -13567,13 +13737,13 @@ { "constant": false, "functionSelector": "1a2be4da", - "id": 409, + "id": 412, "mutability": "mutable", "name": "isWrappedAsset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1170, - "src": "1717:46:1", + "scope": 1175, + "src": "1849:46:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -13581,28 +13751,28 @@ "typeString": "mapping(address => bool)" }, "typeName": { - "id": 408, + "id": 411, "keyType": { - "id": 406, + "id": 409, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1725:7:1", + "src": "1857:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", - "src": "1717:24:1", + "src": "1849:24:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" }, "valueType": { - "id": 407, + "id": 410, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "1736:4:1", + "src": "1868:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13614,14 +13784,14 @@ }, { "body": { - "id": 436, + "id": 439, "nodeType": "Block", - "src": "1880:217:1", + "src": "2023:239:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 422, + "id": 425, "isConstant": false, "isLValue": false, "isPure": false, @@ -13630,29 +13800,29 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 418, + "id": 421, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "1890:13:1", + "referencedDeclaration": 396, + "src": "2033:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 420, + "id": 423, "indexExpression": { "argumentTypes": null, "hexValue": "30", - "id": 419, + "id": 422, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "1904:1:1", + "src": "2047:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -13665,9 +13835,9 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "1890:16:1", + "src": "2033:16:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, @@ -13675,43 +13845,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 421, + "id": 424, "name": "initial_guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 411, - "src": "1909:20:1", + "referencedDeclaration": 414, + "src": "2052:20:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "src": "1890:39:1", + "src": "2033:39:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 423, + "id": 426, "nodeType": "ExpressionStatement", - "src": "1890:39:1" + "src": "2033:39:1" }, { "expression": { "argumentTypes": null, - "id": 426, + "id": 429, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 424, + "id": 427, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "1982:18:1", + "referencedDeclaration": 398, + "src": "2125:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13722,14 +13892,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "30", - "id": 425, + "id": 428, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2003:1:1", + "src": "2146:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -13737,32 +13907,32 @@ }, "value": "0" }, - "src": "1982:22:1", + "src": "2125:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 427, + "id": 430, "nodeType": "ExpressionStatement", - "src": "1982:22:1" + "src": "2125:22:1" }, { "expression": { "argumentTypes": null, - "id": 430, + "id": 433, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 428, - "name": "vaa_expiry", + "id": 431, + "name": "guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "2014:10:1", + "referencedDeclaration": 400, + "src": "2157:21:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13772,43 +13942,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 429, - "name": "_vaa_expiry", + "id": 432, + "name": "_guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 415, - "src": "2027:11:1", + "referencedDeclaration": 418, + "src": "2181:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "2014:24:1", + "src": "2157:46:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 431, + "id": 434, "nodeType": "ExpressionStatement", - "src": "2014:24:1" + "src": "2157:46:1" }, { "expression": { "argumentTypes": null, - "id": 434, + "id": 437, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 432, + "id": 435, "name": "wrappedAssetMaster", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 355, - "src": "2049:18:1", + "referencedDeclaration": 356, + "src": "2214:18:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13818,31 +13988,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 433, + "id": 436, "name": "wrapped_asset_master", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 413, - "src": "2070:20:1", + "referencedDeclaration": 416, + "src": "2235:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "2049:41:1", + "src": "2214:41:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 435, + "id": 438, "nodeType": "ExpressionStatement", - "src": "2049:41:1" + "src": "2214:41:1" } ] }, "documentation": null, - "id": 437, + "id": 440, "implemented": true, "kind": "constructor", "modifiers": [], @@ -13850,33 +14020,33 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 416, + "id": 419, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 411, + "id": 414, "mutability": "mutable", "name": "initial_guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1782:39:1", + "scope": 440, + "src": "1914:39:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 410, + "id": 413, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "1782:11:1", + "referencedDeclaration": 368, + "src": "1914:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -13885,13 +14055,13 @@ }, { "constant": false, - "id": 413, + "id": 416, "mutability": "mutable", "name": "wrapped_asset_master", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1823:28:1", + "scope": 440, + "src": "1955:28:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13899,10 +14069,10 @@ "typeString": "address" }, "typeName": { - "id": 412, + "id": 415, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1823:7:1", + "src": "1955:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -13914,13 +14084,13 @@ }, { "constant": false, - "id": 415, + "id": 418, "mutability": "mutable", - "name": "_vaa_expiry", + "name": "_guardian_set_expirity", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 437, - "src": "1853:18:1", + "scope": 440, + "src": "1985:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13928,10 +14098,10 @@ "typeString": "uint32" }, "typeName": { - "id": 414, + "id": 417, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "1853:6:1", + "src": "1985:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13941,51 +14111,51 @@ "visibility": "internal" } ], - "src": "1781:91:1" + "src": "1913:102:1" }, "returnParameters": { - "id": 417, + "id": 420, "nodeType": "ParameterList", "parameters": [], - "src": "1880:0:1" + "src": "2023:0:1" }, - "scope": 1170, - "src": "1770:327:1", + "scope": 1175, + "src": "1902:360:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 448, + "id": 451, "nodeType": "Block", - "src": "2183:42:1", + "src": "2348:42:1", "statements": [ { "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 444, + "id": 447, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "2200:13:1", + "referencedDeclaration": 396, + "src": "2365:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 446, + "id": 449, "indexExpression": { "argumentTypes": null, - "id": 445, + "id": 448, "name": "idx", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 439, - "src": "2214:3:1", + "referencedDeclaration": 442, + "src": "2379:3:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -13996,22 +14166,22 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "2200:18:1", + "src": "2365:18:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "functionReturnParameters": 443, - "id": 447, + "functionReturnParameters": 446, + "id": 450, "nodeType": "Return", - "src": "2193:25:1" + "src": "2358:25:1" } ] }, "documentation": null, "functionSelector": "f951975a", - "id": 449, + "id": 452, "implemented": true, "kind": "function", "modifiers": [], @@ -14019,18 +14189,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 440, + "id": 443, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 439, + "id": 442, "mutability": "mutable", "name": "idx", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 449, - "src": "2127:10:1", + "scope": 452, + "src": "2292:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14038,10 +14208,10 @@ "typeString": "uint32" }, "typeName": { - "id": 438, + "id": 441, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "2127:6:1", + "src": "2292:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -14051,36 +14221,36 @@ "visibility": "internal" } ], - "src": "2126:12:1" + "src": "2291:12:1" }, "returnParameters": { - "id": 443, + "id": 446, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 442, + "id": 445, "mutability": "mutable", "name": "gs", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 449, - "src": "2160:21:1", + "scope": 452, + "src": "2325:21:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 441, + "id": 444, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "2160:11:1", + "referencedDeclaration": 368, + "src": "2325:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -14088,34 +14258,34 @@ "visibility": "internal" } ], - "src": "2159:23:1" + "src": "2324:23:1" }, - "scope": 1170, - "src": "2103:122:1", + "scope": 1175, + "src": "2268:122:1", "stateMutability": "view", "virtual": false, "visibility": "public" }, { "body": { - "id": 701, + "id": 689, "nodeType": "Block", - "src": "2304:1920:1", + "src": "2469:1801:1", "statements": [ { "assignments": [ - 457 + 460 ], "declarations": [ { "constant": false, - "id": 457, + "id": 460, "mutability": "mutable", "name": "version", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2314:13:1", + "scope": 689, + "src": "2479:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14123,10 +14293,10 @@ "typeString": "uint8" }, "typeName": { - "id": 456, + "id": 459, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "2314:5:1", + "src": "2479:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -14136,21 +14306,21 @@ "visibility": "internal" } ], - "id": 462, + "id": 465, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", - "id": 460, + "id": 463, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2342:1:1", + "src": "2507:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -14168,18 +14338,18 @@ ], "expression": { "argumentTypes": null, - "id": 458, + "id": 461, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2330:3:1", + "referencedDeclaration": 454, + "src": "2495:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 459, + "id": 462, "isConstant": false, "isLValue": false, "isPure": false, @@ -14187,13 +14357,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "2330:11:1", + "src": "2495:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 461, + "id": 464, "isConstant": false, "isLValue": false, "isPure": false, @@ -14201,7 +14371,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2330:14:1", + "src": "2495:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -14209,7 +14379,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2314:30:1" + "src": "2479:30:1" }, { "expression": { @@ -14221,19 +14391,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 466, + "id": 469, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 464, + "id": 467, "name": "version", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 457, - "src": "2362:7:1", + "referencedDeclaration": 460, + "src": "2527:7:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -14244,14 +14414,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 465, + "id": 468, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2373:1:1", + "src": "2538:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -14259,7 +14429,7 @@ }, "value": "1" }, - "src": "2362:12:1", + "src": "2527:12:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14268,14 +14438,14 @@ { "argumentTypes": null, "hexValue": "5641412076657273696f6e20696e636f6d70617469626c65", - "id": 467, + "id": 470, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "2376:26:1", + "src": "2541:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_6f94df49f756ee0c4605e9c5793f0e851f28a084ddaba07c34c32ea93810236a", @@ -14295,7 +14465,7 @@ "typeString": "literal_string \"VAA version incompatible\"" } ], - "id": 463, + "id": 466, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -14303,13 +14473,13 @@ -18 ], "referencedDeclaration": -18, - "src": "2354:7:1", + "src": "2519:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 468, + "id": 471, "isConstant": false, "isLValue": false, "isPure": false, @@ -14317,31 +14487,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2354:49:1", + "src": "2519:49:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 469, + "id": 472, "nodeType": "ExpressionStatement", - "src": "2354:49:1" + "src": "2519:49:1" }, { "assignments": [ - 471 + 474 ], "declarations": [ { "constant": false, - "id": 471, + "id": 474, "mutability": "mutable", "name": "vaa_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2460:29:1", + "scope": 689, + "src": "2625:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14349,10 +14519,10 @@ "typeString": "uint32" }, "typeName": { - "id": 470, + "id": 473, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "2460:6:1", + "src": "2625:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -14362,21 +14532,21 @@ "visibility": "internal" } ], - "id": 476, + "id": 479, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", - "id": 474, + "id": 477, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2505:1:1", + "src": "2670:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -14394,18 +14564,18 @@ ], "expression": { "argumentTypes": null, - "id": 472, + "id": 475, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2492:3:1", + "referencedDeclaration": 454, + "src": "2657:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 473, + "id": 476, "isConstant": false, "isLValue": false, "isPure": false, @@ -14413,13 +14583,13 @@ "memberName": "toUint32", "nodeType": "MemberAccess", "referencedDeclaration": 163, - "src": "2492:12:1", + "src": "2657:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint32)" } }, - "id": 475, + "id": 478, "isConstant": false, "isLValue": false, "isPure": false, @@ -14427,7 +14597,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2492:15:1", + "src": "2657:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -14435,22 +14605,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2460:47:1" + "src": "2625:47:1" }, { "assignments": [ - 478 + 481 ], "declarations": [ { "constant": false, - "id": 478, + "id": 481, "mutability": "mutable", "name": "len_signers", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2518:19:1", + "scope": 689, + "src": "2683:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14458,10 +14628,10 @@ "typeString": "uint256" }, "typeName": { - "id": 477, + "id": 480, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2518:7:1", + "src": "2683:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14471,21 +14641,21 @@ "visibility": "internal" } ], - "id": 483, + "id": 486, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "35", - "id": 481, + "id": 484, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2552:1:1", + "src": "2717:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -14503,18 +14673,18 @@ ], "expression": { "argumentTypes": null, - "id": 479, + "id": 482, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2540:3:1", + "referencedDeclaration": 454, + "src": "2705:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 480, + "id": 483, "isConstant": false, "isLValue": false, "isPure": false, @@ -14522,13 +14692,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "2540:11:1", + "src": "2705:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 482, + "id": 485, "isConstant": false, "isLValue": false, "isPure": false, @@ -14536,7 +14706,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2540:14:1", + "src": "2705:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -14544,22 +14714,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2518:36:1" + "src": "2683:36:1" }, { "assignments": [ - 485 + 488 ], "declarations": [ { "constant": false, - "id": 485, + "id": 488, "mutability": "mutable", "name": "offset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2564:11:1", + "scope": 689, + "src": "2729:11:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14567,10 +14737,10 @@ "typeString": "uint256" }, "typeName": { - "id": 484, + "id": 487, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "2564:4:1", + "src": "2729:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14580,14 +14750,14 @@ "visibility": "internal" } ], - "id": 491, + "id": 494, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 490, + "id": 493, "isConstant": false, "isLValue": false, "isPure": false, @@ -14595,14 +14765,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "36", - "id": 486, + "id": 489, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2578:1:1", + "src": "2743:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_6_by_1", @@ -14618,7 +14788,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 489, + "id": 492, "isConstant": false, "isLValue": false, "isPure": false, @@ -14626,14 +14796,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 487, + "id": 490, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "2582:2:1", + "src": "2747:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -14645,310 +14815,46 @@ "operator": "*", "rightExpression": { "argumentTypes": null, - "id": 488, + "id": 491, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "2587:11:1", + "referencedDeclaration": 481, + "src": "2752:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2582:16:1", + "src": "2747:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2578:20:1", + "src": "2743:20:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "2564:34:1" + "src": "2729:34:1" }, { "assignments": [ - 493 + 496 ], "declarations": [ { "constant": false, - "id": 493, - "mutability": "mutable", - "name": "timestamp", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 701, - "src": "2643:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 492, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2643:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 498, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 496, - "name": "offset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2675:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 494, - "name": "vaa", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2662:3:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "toUint32", - "nodeType": "MemberAccess", - "referencedDeclaration": 163, - "src": "2662:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory,uint256) pure returns (uint32)" - } - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2662:20:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2643:39:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 500, - "name": "timestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "2747:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 501, - "name": "vaa_expiry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "2759:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "2747:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 503, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "2772:5:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2772:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2747:40:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "564141206861732065787069726564", - "id": 506, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2789:17:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_716b6a367d262f21a121968c96e61557fe9c6281596966426b955d4c8c65cb86", - "typeString": "literal_string \"VAA has expired\"" - }, - "value": "VAA has expired" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_716b6a367d262f21a121968c96e61557fe9c6281596966426b955d4c8c65cb86", - "typeString": "literal_string \"VAA has expired\"" - } - ], - "id": 499, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2739:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2739:68:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 508, - "nodeType": "ExpressionStatement", - "src": "2739:68:1" - }, - { - "assignments": [ - 510 - ], - "declarations": [ - { - "constant": false, - "id": 510, + "id": 496, "mutability": "mutable", "name": "hash", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2843:12:1", + "scope": 689, + "src": "2885:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14956,10 +14862,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 509, + "id": 495, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "2843:7:1", + "src": "2885:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -14969,7 +14875,7 @@ "visibility": "internal" } ], - "id": 521, + "id": 507, "initialValue": { "argumentTypes": null, "arguments": [ @@ -14978,12 +14884,12 @@ "arguments": [ { "argumentTypes": null, - "id": 514, + "id": 500, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2878:6:1", + "referencedDeclaration": 488, + "src": "2920:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14995,7 +14901,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 518, + "id": 504, "isConstant": false, "isLValue": false, "isPure": false, @@ -15004,18 +14910,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 515, + "id": 501, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2886:3:1", + "referencedDeclaration": 454, + "src": "2928:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 516, + "id": 502, "isConstant": false, "isLValue": false, "isPure": false, @@ -15023,7 +14929,7 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "2886:10:1", + "src": "2928:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15033,18 +14939,18 @@ "operator": "-", "rightExpression": { "argumentTypes": null, - "id": 517, + "id": 503, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "2899:6:1", + "referencedDeclaration": 488, + "src": "2941:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "2886:19:1", + "src": "2928:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15064,18 +14970,18 @@ ], "expression": { "argumentTypes": null, - "id": 512, + "id": 498, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "2868:3:1", + "referencedDeclaration": 454, + "src": "2910:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 513, + "id": 499, "isConstant": false, "isLValue": false, "isPure": false, @@ -15083,13 +14989,13 @@ "memberName": "slice", "nodeType": "MemberAccess", "referencedDeclaration": 55, - "src": "2868:9:1", + "src": "2910:9:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)" } }, - "id": 519, + "id": 505, "isConstant": false, "isLValue": false, "isPure": false, @@ -15097,7 +15003,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2868:38:1", + "src": "2910:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -15112,18 +15018,18 @@ "typeString": "bytes memory" } ], - "id": 511, + "id": 497, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, - "src": "2858:9:1", + "src": "2900:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 520, + "id": 506, "isConstant": false, "isLValue": false, "isPure": false, @@ -15131,7 +15037,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2858:49:1", + "src": "2900:49:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -15139,7 +15045,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "2843:64:1" + "src": "2885:64:1" }, { "expression": { @@ -15147,7 +15053,7 @@ "arguments": [ { "argumentTypes": null, - "id": 526, + "id": 512, "isConstant": false, "isLValue": false, "isPure": false, @@ -15155,31 +15061,31 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "2925:19:1", + "src": "2967:19:1", "subExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 523, + "id": 509, "name": "consumedVAAs", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 401, - "src": "2926:12:1", + "referencedDeclaration": 404, + "src": "2968:12:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" } }, - "id": 525, + "id": 511, "indexExpression": { "argumentTypes": null, - "id": 524, + "id": 510, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2939:4:1", + "referencedDeclaration": 496, + "src": "2981:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -15190,7 +15096,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "2926:18:1", + "src": "2968:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15204,14 +15110,14 @@ { "argumentTypes": null, "hexValue": "5641412077617320616c7265616479206578656375746564", - "id": 527, + "id": 513, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "2946:26:1", + "src": "2988:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_2c9f12104d534b328038b37a96c0a685f6c00604447c9f6b300f1a21a9a56028", @@ -15231,7 +15137,7 @@ "typeString": "literal_string \"VAA was already executed\"" } ], - "id": 522, + "id": 508, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -15239,13 +15145,13 @@ -18 ], "referencedDeclaration": -18, - "src": "2917:7:1", + "src": "2959:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 528, + "id": 514, "isConstant": false, "isLValue": false, "isPure": false, @@ -15253,46 +15159,46 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "2917:56:1", + "src": "2959:56:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 529, + "id": 515, "nodeType": "ExpressionStatement", - "src": "2917:56:1" + "src": "2959:56:1" }, { "assignments": [ - 531 + 517 ], "declarations": [ { "constant": false, - "id": 531, + "id": 517, "mutability": "mutable", "name": "guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "2984:31:1", + "scope": 689, + "src": "3026:31:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 530, + "id": 516, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "2984:11:1", + "referencedDeclaration": 368, + "src": "3026:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -15300,31 +15206,31 @@ "visibility": "internal" } ], - "id": 535, + "id": 521, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 532, + "id": 518, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "3018:13:1", + "referencedDeclaration": 396, + "src": "3060:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 534, + "id": 520, "indexExpression": { "argumentTypes": null, - "id": 533, + "id": 519, "name": "vaa_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 471, - "src": "3032:22:1", + "referencedDeclaration": 474, + "src": "3074:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -15335,14 +15241,14 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "3018:37:1", + "src": "3060:37:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, "nodeType": "VariableDeclarationStatement", - "src": "2984:71:1" + "src": "3026:71:1" }, { "expression": { @@ -15354,7 +15260,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 546, + "id": 532, "isConstant": false, "isLValue": false, "isPure": false, @@ -15365,7 +15271,7 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 540, + "id": 526, "isConstant": false, "isLValue": false, "isPure": false, @@ -15374,26 +15280,26 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 537, + "id": 523, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3073:12:1", + "referencedDeclaration": 517, + "src": "3115:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 538, + "id": 524, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "3073:28:1", + "referencedDeclaration": 367, + "src": "3115:28:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -15404,14 +15310,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 539, + "id": 525, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3105:1:1", + "src": "3147:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -15419,7 +15325,7 @@ }, "value": "0" }, - "src": "3073:33:1", + "src": "3115:33:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15433,7 +15339,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 545, + "id": 531, "isConstant": false, "isLValue": false, "isPure": false, @@ -15442,26 +15348,26 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 541, + "id": 527, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3110:12:1", + "referencedDeclaration": 517, + "src": "3152:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 542, + "id": 528, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "3110:28:1", + "referencedDeclaration": 367, + "src": "3152:28:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -15473,18 +15379,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 543, + "id": 529, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, - "src": "3141:5:1", + "src": "3183:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 544, + "id": 530, "isConstant": false, "isLValue": false, "isPure": false, @@ -15492,19 +15398,19 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3141:15:1", + "src": "3183:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3110:46:1", + "src": "3152:46:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "3073:83:1", + "src": "3115:83:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15513,14 +15419,14 @@ { "argumentTypes": null, "hexValue": "677561726469616e20736574206861732065787069726564", - "id": 547, + "id": 533, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3158:26:1", + "src": "3200:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_cbe80c778d9be5c7f6d0de415ae854de0cf9a58da1d3e65a9d672ad42a10aaf1", @@ -15540,7 +15446,7 @@ "typeString": "literal_string \"guardian set has expired\"" } ], - "id": 536, + "id": 522, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -15548,13 +15454,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3065:7:1", + "src": "3107:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 548, + "id": 534, "isConstant": false, "isLValue": false, "isPure": false, @@ -15562,16 +15468,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3065:120:1", + "src": "3107:120:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 549, + "id": 535, "nodeType": "ExpressionStatement", - "src": "3065:120:1" + "src": "3107:120:1" }, { "expression": { @@ -15583,7 +15489,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 561, + "id": 549, "isConstant": false, "isLValue": false, "isPure": false, @@ -15594,125 +15500,159 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 559, + "id": 547, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 557, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 555, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { + "components": [ + { "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 551, - "name": "guardian_set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3203:12:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", - "typeString": "struct Wormhole.GuardianSet memory" - } - }, - "id": 552, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "keys", - "nodeType": "MemberAccess", - "referencedDeclaration": 364, - "src": "3203:17:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" }, - "id": 553, + "id": 544, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3203:24:1", + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 537, + "name": "guardian_set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "3247:12:1", + "typeDescriptions": { + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", + "typeString": "struct Wormhole.GuardianSet memory" + } + }, + "id": 538, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "keys", + "nodeType": "MemberAccess", + "referencedDeclaration": 365, + "src": "3247:17:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3247:24:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "hexValue": "34", + "id": 540, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3274:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "3247:28:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 542, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3246:30:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "hexValue": "33", + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3279:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "3246:34:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 554, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3230:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "3203:28:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3234:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "3203:32:1", + ], + "id": 545, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3245:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15723,14 +15663,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 558, + "id": 546, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3238:1:1", + "src": "3284:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -15738,7 +15678,7 @@ }, "value": "1" }, - "src": "3203:36:1", + "src": "3245:40:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15748,18 +15688,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 560, + "id": 548, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "3243:11:1", + "referencedDeclaration": 481, + "src": "3289:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3203:51:1", + "src": "3245:55:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15768,14 +15708,14 @@ { "argumentTypes": null, "hexValue": "6e6f2071756f72756d", - "id": 562, + "id": 550, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3256:11:1", + "src": "3302:11:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b18d2210a58b70fe2b7fd0e0f29d90614b1c4f3f5d8dbb518559998f90306fcb", @@ -15795,7 +15735,7 @@ "typeString": "literal_string \"no quorum\"" } ], - "id": 550, + "id": 536, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -15803,13 +15743,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3195:7:1", + "src": "3237:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 563, + "id": 551, "isConstant": false, "isLValue": false, "isPure": false, @@ -15817,37 +15757,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3195:73:1", + "src": "3237:77:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 564, + "id": 552, "nodeType": "ExpressionStatement", - "src": "3195:73:1" + "src": "3237:77:1" }, { "body": { - "id": 638, + "id": 626, "nodeType": "Block", - "src": "3318:334:1", + "src": "3364:334:1", "statements": [ { "assignments": [ - 576 + 564 ], "declarations": [ { "constant": false, - "id": 576, + "id": 564, "mutability": "mutable", "name": "index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3332:11:1", + "scope": 626, + "src": "3378:11:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15855,10 +15795,10 @@ "typeString": "uint8" }, "typeName": { - "id": 575, + "id": 563, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3332:5:1", + "src": "3378:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -15868,7 +15808,7 @@ "visibility": "internal" } ], - "id": 585, + "id": 573, "initialValue": { "argumentTypes": null, "arguments": [ @@ -15878,7 +15818,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 583, + "id": 571, "isConstant": false, "isLValue": false, "isPure": false, @@ -15886,14 +15826,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "36", - "id": 579, + "id": 567, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3358:1:1", + "src": "3404:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_6_by_1", @@ -15909,19 +15849,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 582, + "id": 570, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 580, + "id": 568, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3362:1:1", + "referencedDeclaration": 554, + "src": "3408:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15932,14 +15872,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 581, + "id": 569, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3366:2:1", + "src": "3412:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -15947,13 +15887,13 @@ }, "value": "66" }, - "src": "3362:6:1", + "src": "3408:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3358:10:1", + "src": "3404:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15969,18 +15909,18 @@ ], "expression": { "argumentTypes": null, - "id": 577, + "id": 565, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3346:3:1", + "referencedDeclaration": 454, + "src": "3392:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 578, + "id": 566, "isConstant": false, "isLValue": false, "isPure": false, @@ -15988,13 +15928,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3346:11:1", + "src": "3392:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 584, + "id": 572, "isConstant": false, "isLValue": false, "isPure": false, @@ -16002,7 +15942,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3346:23:1", + "src": "3392:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -16010,22 +15950,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3332:37:1" + "src": "3378:37:1" }, { "assignments": [ - 587 + 575 ], "declarations": [ { "constant": false, - "id": 587, + "id": 575, "mutability": "mutable", "name": "r", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3383:9:1", + "scope": 626, + "src": "3429:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16033,10 +15973,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 586, + "id": 574, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3383:7:1", + "src": "3429:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -16046,7 +15986,7 @@ "visibility": "internal" } ], - "id": 596, + "id": 584, "initialValue": { "argumentTypes": null, "arguments": [ @@ -16056,7 +15996,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 594, + "id": 582, "isConstant": false, "isLValue": false, "isPure": false, @@ -16064,14 +16004,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "37", - "id": 590, + "id": 578, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3409:1:1", + "src": "3455:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_7_by_1", @@ -16087,19 +16027,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 593, + "id": 581, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 591, + "id": 579, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3413:1:1", + "referencedDeclaration": 554, + "src": "3459:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16110,14 +16050,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 592, + "id": 580, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3417:2:1", + "src": "3463:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -16125,13 +16065,13 @@ }, "value": "66" }, - "src": "3413:6:1", + "src": "3459:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3409:10:1", + "src": "3455:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16147,18 +16087,18 @@ ], "expression": { "argumentTypes": null, - "id": 588, + "id": 576, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3395:3:1", + "referencedDeclaration": 454, + "src": "3441:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 589, + "id": 577, "isConstant": false, "isLValue": false, "isPure": false, @@ -16166,13 +16106,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "3395:13:1", + "src": "3441:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 595, + "id": 583, "isConstant": false, "isLValue": false, "isPure": false, @@ -16180,7 +16120,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3395:25:1", + "src": "3441:25:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -16188,22 +16128,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3383:37:1" + "src": "3429:37:1" }, { "assignments": [ - 598 + 586 ], "declarations": [ { "constant": false, - "id": 598, + "id": 586, "mutability": "mutable", "name": "s", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3434:9:1", + "scope": 626, + "src": "3480:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16211,10 +16151,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 597, + "id": 585, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3434:7:1", + "src": "3480:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -16224,7 +16164,7 @@ "visibility": "internal" } ], - "id": 607, + "id": 595, "initialValue": { "argumentTypes": null, "arguments": [ @@ -16234,7 +16174,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 605, + "id": 593, "isConstant": false, "isLValue": false, "isPure": false, @@ -16242,14 +16182,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3339", - "id": 601, + "id": 589, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3460:2:1", + "src": "3506:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_39_by_1", @@ -16265,19 +16205,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 604, + "id": 592, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 602, + "id": 590, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3465:1:1", + "referencedDeclaration": 554, + "src": "3511:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16288,14 +16228,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 603, + "id": 591, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3469:2:1", + "src": "3515:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -16303,13 +16243,13 @@ }, "value": "66" }, - "src": "3465:6:1", + "src": "3511:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3460:11:1", + "src": "3506:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16325,18 +16265,18 @@ ], "expression": { "argumentTypes": null, - "id": 599, + "id": 587, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3446:3:1", + "referencedDeclaration": 454, + "src": "3492:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 600, + "id": 588, "isConstant": false, "isLValue": false, "isPure": false, @@ -16344,13 +16284,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "3446:13:1", + "src": "3492:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 606, + "id": 594, "isConstant": false, "isLValue": false, "isPure": false, @@ -16358,7 +16298,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3446:26:1", + "src": "3492:26:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -16366,22 +16306,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3434:38:1" + "src": "3480:38:1" }, { "assignments": [ - 609 + 597 ], "declarations": [ { "constant": false, - "id": 609, + "id": 597, "mutability": "mutable", "name": "v", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 638, - "src": "3486:7:1", + "scope": 626, + "src": "3532:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16389,10 +16329,10 @@ "typeString": "uint8" }, "typeName": { - "id": 608, + "id": 596, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3486:5:1", + "src": "3532:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -16402,7 +16342,7 @@ "visibility": "internal" } ], - "id": 618, + "id": 606, "initialValue": { "argumentTypes": null, "arguments": [ @@ -16412,7 +16352,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 616, + "id": 604, "isConstant": false, "isLValue": false, "isPure": false, @@ -16420,14 +16360,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3731", - "id": 612, + "id": 600, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3508:2:1", + "src": "3554:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -16443,19 +16383,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 615, + "id": 603, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 613, + "id": 601, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3513:1:1", + "referencedDeclaration": 554, + "src": "3559:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16466,14 +16406,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3636", - "id": 614, + "id": 602, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3517:2:1", + "src": "3563:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_66_by_1", @@ -16481,13 +16421,13 @@ }, "value": "66" }, - "src": "3513:6:1", + "src": "3559:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3508:11:1", + "src": "3554:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16503,18 +16443,18 @@ ], "expression": { "argumentTypes": null, - "id": 610, + "id": 598, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3496:3:1", + "referencedDeclaration": 454, + "src": "3542:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 611, + "id": 599, "isConstant": false, "isLValue": false, "isPure": false, @@ -16522,13 +16462,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3496:11:1", + "src": "3542:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 617, + "id": 605, "isConstant": false, "isLValue": false, "isPure": false, @@ -16536,7 +16476,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3496:24:1", + "src": "3542:24:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -16544,24 +16484,24 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3486:34:1" + "src": "3532:34:1" }, { "expression": { "argumentTypes": null, - "id": 621, + "id": 609, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 619, + "id": 607, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "3534:1:1", + "referencedDeclaration": 597, + "src": "3580:1:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -16572,14 +16512,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "3237", - "id": 620, + "id": 608, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3539:2:1", + "src": "3585:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_27_by_1", @@ -16587,15 +16527,15 @@ }, "value": "27" }, - "src": "3534:7:1", + "src": "3580:7:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "id": 622, + "id": 610, "nodeType": "ExpressionStatement", - "src": "3534:7:1" + "src": "3580:7:1" }, { "expression": { @@ -16607,7 +16547,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 634, + "id": 622, "isConstant": false, "isLValue": false, "isPure": false, @@ -16617,12 +16557,12 @@ "arguments": [ { "argumentTypes": null, - "id": 625, + "id": 613, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "3573:4:1", + "referencedDeclaration": 496, + "src": "3619:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -16630,12 +16570,12 @@ }, { "argumentTypes": null, - "id": 626, + "id": 614, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "3579:1:1", + "referencedDeclaration": 597, + "src": "3625:1:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -16643,12 +16583,12 @@ }, { "argumentTypes": null, - "id": 627, + "id": 615, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 587, - "src": "3582:1:1", + "referencedDeclaration": 575, + "src": "3628:1:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -16656,12 +16596,12 @@ }, { "argumentTypes": null, - "id": 628, + "id": 616, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 598, - "src": "3585:1:1", + "referencedDeclaration": 586, + "src": "3631:1:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -16687,18 +16627,18 @@ "typeString": "bytes32" } ], - "id": 624, + "id": 612, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -6, - "src": "3563:9:1", + "src": "3609:9:1", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, - "id": 629, + "id": 617, "isConstant": false, "isLValue": false, "isPure": false, @@ -16706,7 +16646,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3563:24:1", + "src": "3609:24:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -16721,40 +16661,40 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 630, + "id": 618, "name": "guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "3591:12:1", + "referencedDeclaration": 517, + "src": "3637:12:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "id": 631, + "id": 619, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberName": "keys", "nodeType": "MemberAccess", - "referencedDeclaration": 364, - "src": "3591:17:1", + "referencedDeclaration": 365, + "src": "3637:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, - "id": 633, + "id": 621, "indexExpression": { "argumentTypes": null, - "id": 632, + "id": 620, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 576, - "src": "3609:5:1", + "referencedDeclaration": 564, + "src": "3655:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -16765,13 +16705,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "3591:24:1", + "src": "3637:24:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3563:52:1", + "src": "3609:52:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16780,14 +16720,14 @@ { "argumentTypes": null, "hexValue": "564141207369676e617475726520696e76616c6964", - "id": 635, + "id": 623, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3617:23:1", + "src": "3663:23:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_862afa71aa5d7cd3e53f61178438850df5cce8f1009ff0681521493b85052621", @@ -16807,7 +16747,7 @@ "typeString": "literal_string \"VAA signature invalid\"" } ], - "id": 623, + "id": 611, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -16815,13 +16755,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3555:7:1", + "src": "3601:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 636, + "id": 624, "isConstant": false, "isLValue": false, "isPure": false, @@ -16829,16 +16769,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3555:86:1", + "src": "3601:86:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 637, + "id": 625, "nodeType": "ExpressionStatement", - "src": "3555:86:1" + "src": "3601:86:1" } ] }, @@ -16848,19 +16788,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 571, + "id": 559, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 569, + "id": 557, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3296:1:1", + "referencedDeclaration": 554, + "src": "3342:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16870,38 +16810,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 570, + "id": 558, "name": "len_signers", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 478, - "src": "3300:11:1", + "referencedDeclaration": 481, + "src": "3346:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3296:15:1", + "src": "3342:15:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 639, + "id": 627, "initializationExpression": { "assignments": [ - 566 + 554 ], "declarations": [ { "constant": false, - "id": 566, + "id": 554, "mutability": "mutable", "name": "i", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 639, - "src": "3284:6:1", + "scope": 627, + "src": "3330:6:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16909,10 +16849,10 @@ "typeString": "uint256" }, "typeName": { - "id": 565, + "id": 553, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "3284:4:1", + "src": "3330:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16922,18 +16862,18 @@ "visibility": "internal" } ], - "id": 568, + "id": 556, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 567, + "id": 555, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3293:1:1", + "src": "3339:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -16942,12 +16882,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "3284:10:1" + "src": "3330:10:1" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 573, + "id": 561, "isConstant": false, "isLValue": false, "isPure": false, @@ -16955,15 +16895,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "3313:3:1", + "src": "3359:3:1", "subExpression": { "argumentTypes": null, - "id": 572, + "id": 560, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 566, - "src": "3313:1:1", + "referencedDeclaration": 554, + "src": "3359:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16974,27 +16914,27 @@ "typeString": "uint256" } }, - "id": 574, + "id": 562, "nodeType": "ExpressionStatement", - "src": "3313:3:1" + "src": "3359:3:1" }, "nodeType": "ForStatement", - "src": "3279:373:1" + "src": "3325:373:1" }, { "assignments": [ - 641 + 629 ], "declarations": [ { "constant": false, - "id": 641, + "id": 629, "mutability": "mutable", "name": "action", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "3662:12:1", + "scope": 689, + "src": "3708:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17002,10 +16942,10 @@ "typeString": "uint8" }, "typeName": { - "id": 640, + "id": 628, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3662:5:1", + "src": "3708:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -17015,7 +16955,7 @@ "visibility": "internal" } ], - "id": 648, + "id": 636, "initialValue": { "argumentTypes": null, "arguments": [ @@ -17025,19 +16965,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 646, + "id": 634, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 644, + "id": 632, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3689:6:1", + "referencedDeclaration": 488, + "src": "3735:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17048,14 +16988,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "34", - "id": 645, + "id": 633, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3698:1:1", + "src": "3744:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -17063,7 +17003,7 @@ }, "value": "4" }, - "src": "3689:10:1", + "src": "3735:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17079,18 +17019,18 @@ ], "expression": { "argumentTypes": null, - "id": 642, + "id": 630, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3677:3:1", + "referencedDeclaration": 454, + "src": "3723:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 643, + "id": 631, "isConstant": false, "isLValue": false, "isPure": false, @@ -17098,13 +17038,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "3677:11:1", + "src": "3723:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 647, + "id": 635, "isConstant": false, "isLValue": false, "isPure": false, @@ -17112,7 +17052,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3677:23:1", + "src": "3723:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -17120,22 +17060,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3662:38:1" + "src": "3708:38:1" }, { "assignments": [ - 650 + 638 ], "declarations": [ { "constant": false, - "id": 650, + "id": 638, "mutability": "mutable", "name": "payload", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 701, - "src": "3710:20:1", + "scope": 689, + "src": "3756:20:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17143,10 +17083,10 @@ "typeString": "bytes" }, "typeName": { - "id": 649, + "id": 637, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "3710:5:1", + "src": "3756:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -17156,7 +17096,7 @@ "visibility": "internal" } ], - "id": 664, + "id": 652, "initialValue": { "argumentTypes": null, "arguments": [ @@ -17166,19 +17106,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 655, + "id": 643, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 653, + "id": 641, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3743:6:1", + "referencedDeclaration": 488, + "src": "3789:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17189,14 +17129,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "35", - "id": 654, + "id": 642, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3752:1:1", + "src": "3798:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -17204,7 +17144,7 @@ }, "value": "5" }, - "src": "3743:10:1", + "src": "3789:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17216,7 +17156,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 662, + "id": 650, "isConstant": false, "isLValue": false, "isPure": false, @@ -17225,18 +17165,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 644, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3755:3:1", + "referencedDeclaration": 454, + "src": "3801:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 657, + "id": 645, "isConstant": false, "isLValue": false, "isPure": false, @@ -17244,7 +17184,7 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3755:10:1", + "src": "3801:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17261,19 +17201,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 660, + "id": 648, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 658, + "id": 646, "name": "offset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 485, - "src": "3769:6:1", + "referencedDeclaration": 488, + "src": "3815:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17284,14 +17224,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "35", - "id": 659, + "id": 647, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3778:1:1", + "src": "3824:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -17299,27 +17239,27 @@ }, "value": "5" }, - "src": "3769:10:1", + "src": "3815:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "id": 661, + "id": 649, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "3768:12:1", + "src": "3814:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3755:25:1", + "src": "3801:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17339,18 +17279,18 @@ ], "expression": { "argumentTypes": null, - "id": 651, + "id": 639, "name": "vaa", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 451, - "src": "3733:3:1", + "referencedDeclaration": 454, + "src": "3779:3:1", "typeDescriptions": { "typeIdentifier": "t_bytes_calldata_ptr", "typeString": "bytes calldata" } }, - "id": 652, + "id": 640, "isConstant": false, "isLValue": false, "isPure": false, @@ -17358,13 +17298,13 @@ "memberName": "slice", "nodeType": "MemberAccess", "referencedDeclaration": 55, - "src": "3733:9:1", + "src": "3779:9:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)" } }, - "id": 663, + "id": 651, "isConstant": false, "isLValue": false, "isPure": false, @@ -17372,7 +17312,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3733:48:1", + "src": "3779:48:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -17380,7 +17320,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3710:71:1" + "src": "3756:71:1" }, { "condition": { @@ -17389,19 +17329,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 667, + "id": 655, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 665, + "id": 653, "name": "action", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "3819:6:1", + "referencedDeclaration": 629, + "src": "3865:6:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -17412,14 +17352,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30783031", - "id": 666, + "id": 654, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "3829:4:1", + "src": "3875:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -17427,7 +17367,7 @@ }, "value": "0x01" }, - "src": "3819:14:1", + "src": "3865:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17440,19 +17380,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 682, + "id": 670, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 680, + "id": 668, "name": "action", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "4027:6:1", + "referencedDeclaration": 629, + "src": "4073:6:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -17463,14 +17403,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30783130", - "id": 681, + "id": 669, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4037:4:1", + "src": "4083:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_16_by_1", @@ -17478,16 +17418,16 @@ }, "value": "0x10" }, - "src": "4027:14:1", + "src": "4073:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 692, + "id": 680, "nodeType": "Block", - "src": "4094:53:1", + "src": "4140:53:1", "statements": [ { "expression": { @@ -17496,14 +17436,14 @@ { "argumentTypes": null, "hexValue": "696e76616c69642056414120616374696f6e", - "id": 689, + "id": 677, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "4115:20:1", + "src": "4161:20:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27b2ea60c72d322d8c69062a768962688555c44551176a8b0389f506128d4a66", @@ -17519,7 +17459,7 @@ "typeString": "literal_string \"invalid VAA action\"" } ], - "id": 688, + "id": 676, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -17527,13 +17467,13 @@ -19 ], "referencedDeclaration": -19, - "src": "4108:6:1", + "src": "4154:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 690, + "id": 678, "isConstant": false, "isLValue": false, "isPure": false, @@ -17541,26 +17481,26 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4108:28:1", + "src": "4154:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 691, + "id": 679, "nodeType": "ExpressionStatement", - "src": "4108:28:1" + "src": "4154:28:1" } ] }, - "id": 693, + "id": 681, "nodeType": "IfStatement", - "src": "4023:124:1", + "src": "4069:124:1", "trueBody": { - "id": 687, + "id": 675, "nodeType": "Block", - "src": "4043:45:1", + "src": "4089:45:1", "statements": [ { "expression": { @@ -17568,12 +17508,12 @@ "arguments": [ { "argumentTypes": null, - "id": 684, + "id": 672, "name": "payload", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 650, - "src": "4069:7:1", + "referencedDeclaration": 638, + "src": "4115:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -17587,18 +17527,18 @@ "typeString": "bytes memory" } ], - "id": 683, + "id": 671, "name": "vaaTransfer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "4057:11:1", + "referencedDeclaration": 924, + "src": "4103:11:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (bytes memory)" } }, - "id": 685, + "id": 673, "isConstant": false, "isLValue": false, "isPure": false, @@ -17606,27 +17546,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4057:20:1", + "src": "4103:20:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 686, + "id": 674, "nodeType": "ExpressionStatement", - "src": "4057:20:1" + "src": "4103:20:1" } ] } }, - "id": 694, + "id": 682, "nodeType": "IfStatement", - "src": "3815:332:1", + "src": "3861:332:1", "trueBody": { - "id": 679, + "id": 667, "nodeType": "Block", - "src": "3835:182:1", + "src": "3881:182:1", "statements": [ { "expression": { @@ -17638,19 +17578,19 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 671, + "id": 659, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 669, + "id": 657, "name": "vaa_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 471, - "src": "3857:22:1", + "referencedDeclaration": 474, + "src": "3903:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -17660,18 +17600,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 670, + "id": 658, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "3883:18:1", + "referencedDeclaration": 398, + "src": "3929:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "3857:44:1", + "src": "3903:44:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17680,14 +17620,14 @@ { "argumentTypes": null, "hexValue": "6f6e6c79207468652063757272656e7420677561726469616e207365742063616e206368616e67652074686520677561726469616e20736574", - "id": 672, + "id": 660, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "3903:59:1", + "src": "3949:59:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_57f82f54015302e10ddc5f5b0f8eebea6891c2be815aa07f38e9301457bc8c6a", @@ -17707,7 +17647,7 @@ "typeString": "literal_string \"only the current guardian set can change the guardian set\"" } ], - "id": 668, + "id": 656, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -17715,13 +17655,13 @@ -18 ], "referencedDeclaration": -18, - "src": "3849:7:1", + "src": "3895:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 673, + "id": 661, "isConstant": false, "isLValue": false, "isPure": false, @@ -17729,16 +17669,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3849:114:1", + "src": "3895:114:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 674, + "id": 662, "nodeType": "ExpressionStatement", - "src": "3849:114:1" + "src": "3895:114:1" }, { "expression": { @@ -17746,12 +17686,12 @@ "arguments": [ { "argumentTypes": null, - "id": 676, + "id": 664, "name": "payload", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 650, - "src": "3998:7:1", + "referencedDeclaration": 638, + "src": "4044:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -17765,18 +17705,18 @@ "typeString": "bytes memory" } ], - "id": 675, + "id": 663, "name": "vaaUpdateGuardianSet", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 801, - "src": "3977:20:1", + "referencedDeclaration": 789, + "src": "4023:20:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (bytes memory)" } }, - "id": 677, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -17784,16 +17724,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3977:29:1", + "src": "4023:29:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 678, + "id": 666, "nodeType": "ExpressionStatement", - "src": "3977:29:1" + "src": "4023:29:1" } ] } @@ -17801,7 +17741,7 @@ { "expression": { "argumentTypes": null, - "id": 699, + "id": 687, "isConstant": false, "isLValue": false, "isPure": false, @@ -17810,26 +17750,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 695, + "id": 683, "name": "consumedVAAs", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 401, - "src": "4192:12:1", + "referencedDeclaration": 404, + "src": "4238:12:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$", "typeString": "mapping(bytes32 => bool)" } }, - "id": 697, + "id": 685, "indexExpression": { "argumentTypes": null, - "id": 696, + "id": 684, "name": "hash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "4205:4:1", + "referencedDeclaration": 496, + "src": "4251:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -17840,7 +17780,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4192:18:1", + "src": "4238:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17851,14 +17791,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 698, + "id": 686, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "4213:4:1", + "src": "4259:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -17866,60 +17806,60 @@ }, "value": "true" }, - "src": "4192:25:1", + "src": "4238:25:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 700, + "id": 688, "nodeType": "ExpressionStatement", - "src": "4192:25:1" + "src": "4238:25:1" } ] }, "documentation": null, "functionSelector": "3bc0aee6", - "id": 702, + "id": 690, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 454, + "id": 457, "modifierName": { "argumentTypes": null, - "id": 453, + "id": 456, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "2291:12:1", + "referencedDeclaration": 2992, + "src": "2456:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "2291:12:1" + "src": "2456:12:1" } ], "name": "submitVAA", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 452, + "id": 455, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 451, + "id": 454, "mutability": "mutable", "name": "vaa", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 702, - "src": "2259:18:1", + "scope": 690, + "src": "2424:18:1", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -17927,10 +17867,10 @@ "typeString": "bytes" }, "typeName": { - "id": 450, + "id": 453, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "2259:5:1", + "src": "2424:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -17940,40 +17880,40 @@ "visibility": "internal" } ], - "src": "2249:34:1" + "src": "2414:34:1" }, "returnParameters": { - "id": 455, + "id": 458, "nodeType": "ParameterList", "parameters": [], - "src": "2304:0:1" + "src": "2469:0:1" }, - "scope": 1170, - "src": "2231:1993:1", + "scope": 1175, + "src": "2396:1874:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 800, + "id": 788, "nodeType": "Block", - "src": "4287:744:1", + "src": "4333:755:1", "statements": [ { "assignments": [ - 708 + 696 ], "declarations": [ { "constant": false, - "id": 708, + "id": 696, "mutability": "mutable", "name": "new_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4297:29:1", + "scope": 788, + "src": "4343:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17981,10 +17921,10 @@ "typeString": "uint32" }, "typeName": { - "id": 707, + "id": 695, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4297:6:1", + "src": "4343:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -17994,21 +17934,21 @@ "visibility": "internal" } ], - "id": 713, + "id": 701, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", - "id": 711, + "id": 699, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4343:1:1", + "src": "4389:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -18026,18 +17966,18 @@ ], "expression": { "argumentTypes": null, - "id": 709, + "id": 697, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4329:4:1", + "referencedDeclaration": 692, + "src": "4375:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 710, + "id": 698, "isConstant": false, "isLValue": false, "isPure": false, @@ -18045,13 +17985,13 @@ "memberName": "toUint32", "nodeType": "MemberAccess", "referencedDeclaration": 163, - "src": "4329:13:1", + "src": "4375:13:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint32)" } }, - "id": 712, + "id": 700, "isConstant": false, "isLValue": false, "isPure": false, @@ -18059,7 +17999,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4329:16:1", + "src": "4375:16:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -18067,22 +18007,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4297:48:1" + "src": "4343:48:1" }, { "assignments": [ - 715 + 703 ], "declarations": [ { "constant": false, - "id": 715, + "id": 703, "mutability": "mutable", "name": "len", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4355:9:1", + "scope": 788, + "src": "4401:9:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18090,10 +18030,10 @@ "typeString": "uint8" }, "typeName": { - "id": 714, + "id": 702, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "4355:5:1", + "src": "4401:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -18103,21 +18043,21 @@ "visibility": "internal" } ], - "id": 720, + "id": 708, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "34", - "id": 718, + "id": 706, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4380:1:1", + "src": "4426:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -18135,18 +18075,18 @@ ], "expression": { "argumentTypes": null, - "id": 716, + "id": 704, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4367:4:1", + "referencedDeclaration": 692, + "src": "4413:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 717, + "id": 705, "isConstant": false, "isLValue": false, "isPure": false, @@ -18154,13 +18094,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "4367:12:1", + "src": "4413:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 719, + "id": 707, "isConstant": false, "isLValue": false, "isPure": false, @@ -18168,7 +18108,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4367:15:1", + "src": "4413:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -18176,22 +18116,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4355:27:1" + "src": "4401:27:1" }, { "assignments": [ - 725 + 713 ], "declarations": [ { "constant": false, - "id": 725, + "id": 713, "mutability": "mutable", "name": "new_guardians", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4393:30:1", + "scope": 788, + "src": "4439:30:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -18200,19 +18140,19 @@ }, "typeName": { "baseType": { - "id": 723, + "id": 711, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4393:7:1", + "src": "4439:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 724, + "id": 712, "length": null, "nodeType": "ArrayTypeName", - "src": "4393:9:1", + "src": "4439:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" @@ -18222,18 +18162,18 @@ "visibility": "internal" } ], - "id": 731, + "id": 719, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 729, + "id": 717, "name": "len", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "4440:3:1", + "referencedDeclaration": 703, + "src": "4486:3:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -18247,40 +18187,40 @@ "typeString": "uint8" } ], - "id": 728, + "id": 716, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "NewExpression", - "src": "4426:13:1", + "src": "4472:13:1", "typeDescriptions": { "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", "typeString": "function (uint256) pure returns (address[] memory)" }, "typeName": { "baseType": { - "id": 726, + "id": 714, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4430:7:1", + "src": "4476:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 727, + "id": 715, "length": null, "nodeType": "ArrayTypeName", - "src": "4430:9:1", + "src": "4476:9:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" } } }, - "id": 730, + "id": 718, "isConstant": false, "isLValue": false, "isPure": false, @@ -18288,7 +18228,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4426:18:1", + "src": "4472:18:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -18296,28 +18236,28 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4393:51:1" + "src": "4439:51:1" }, { "body": { - "id": 759, + "id": 747, "nodeType": "Block", - "src": "4485:103:1", + "src": "4531:103:1", "statements": [ { "assignments": [ - 743 + 731 ], "declarations": [ { "constant": false, - "id": 743, + "id": 731, "mutability": "mutable", "name": "addr", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 759, - "src": "4499:12:1", + "scope": 747, + "src": "4545:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18325,10 +18265,10 @@ "typeString": "address" }, "typeName": { - "id": 742, + "id": 730, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4499:7:1", + "src": "4545:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -18339,7 +18279,7 @@ "visibility": "internal" } ], - "id": 752, + "id": 740, "initialValue": { "argumentTypes": null, "arguments": [ @@ -18349,7 +18289,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 750, + "id": 738, "isConstant": false, "isLValue": false, "isPure": false, @@ -18357,14 +18297,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "35", - "id": 746, + "id": 734, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4529:1:1", + "src": "4575:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -18380,19 +18320,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 749, + "id": 737, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 747, + "id": 735, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4533:1:1", + "referencedDeclaration": 721, + "src": "4579:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18403,14 +18343,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3230", - "id": 748, + "id": 736, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4537:2:1", + "src": "4583:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_20_by_1", @@ -18418,13 +18358,13 @@ }, "value": "20" }, - "src": "4533:6:1", + "src": "4579:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4529:10:1", + "src": "4575:10:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18440,18 +18380,18 @@ ], "expression": { "argumentTypes": null, - "id": 744, + "id": 732, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "4514:4:1", + "referencedDeclaration": 692, + "src": "4560:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 745, + "id": 733, "isConstant": false, "isLValue": false, "isPure": false, @@ -18459,13 +18399,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "4514:14:1", + "src": "4560:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 751, + "id": 739, "isConstant": false, "isLValue": false, "isPure": false, @@ -18473,7 +18413,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4514:26:1", + "src": "4560:26:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -18481,12 +18421,12 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "4499:41:1" + "src": "4545:41:1" }, { "expression": { "argumentTypes": null, - "id": 757, + "id": 745, "isConstant": false, "isLValue": false, "isPure": false, @@ -18495,26 +18435,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 753, + "id": 741, "name": "new_guardians", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "4554:13:1", + "referencedDeclaration": 713, + "src": "4600:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, - "id": 755, + "id": 743, "indexExpression": { "argumentTypes": null, - "id": 754, + "id": 742, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4568:1:1", + "referencedDeclaration": 721, + "src": "4614:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18525,7 +18465,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4554:16:1", + "src": "4600:16:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -18535,26 +18475,26 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 756, + "id": 744, "name": "addr", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 743, - "src": "4573:4:1", + "referencedDeclaration": 731, + "src": "4619:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "4554:23:1", + "src": "4600:23:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 758, + "id": 746, "nodeType": "ExpressionStatement", - "src": "4554:23:1" + "src": "4600:23:1" } ] }, @@ -18564,19 +18504,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 738, + "id": 726, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 736, + "id": 724, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4471:1:1", + "referencedDeclaration": 721, + "src": "4517:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18586,38 +18526,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 737, + "id": 725, "name": "len", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "4475:3:1", + "referencedDeclaration": 703, + "src": "4521:3:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "4471:7:1", + "src": "4517:7:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 760, + "id": 748, "initializationExpression": { "assignments": [ - 733 + 721 ], "declarations": [ { "constant": false, - "id": 733, + "id": 721, "mutability": "mutable", "name": "i", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 760, - "src": "4459:6:1", + "scope": 748, + "src": "4505:6:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18625,10 +18565,10 @@ "typeString": "uint256" }, "typeName": { - "id": 732, + "id": 720, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "4459:4:1", + "src": "4505:4:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18638,18 +18578,18 @@ "visibility": "internal" } ], - "id": 735, + "id": 723, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 734, + "id": 722, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4468:1:1", + "src": "4514:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -18658,12 +18598,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "4459:10:1" + "src": "4505:10:1" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 740, + "id": 728, "isConstant": false, "isLValue": false, "isPure": false, @@ -18671,15 +18611,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "4480:3:1", + "src": "4526:3:1", "subExpression": { "argumentTypes": null, - "id": 739, + "id": 727, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 733, - "src": "4480:1:1", + "referencedDeclaration": 721, + "src": "4526:1:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18690,27 +18630,27 @@ "typeString": "uint256" } }, - "id": 741, + "id": 729, "nodeType": "ExpressionStatement", - "src": "4480:3:1" + "src": "4526:3:1" }, "nodeType": "ForStatement", - "src": "4454:134:1" + "src": "4500:134:1" }, { "assignments": [ - 762 + 750 ], "declarations": [ { "constant": false, - "id": 762, + "id": 750, "mutability": "mutable", "name": "old_guardian_set_index", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4598:29:1", + "scope": 788, + "src": "4644:29:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18718,10 +18658,10 @@ "typeString": "uint32" }, "typeName": { - "id": 761, + "id": 749, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4598:6:1", + "src": "4644:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -18731,39 +18671,39 @@ "visibility": "internal" } ], - "id": 764, + "id": 752, "initialValue": { "argumentTypes": null, - "id": 763, + "id": 751, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4630:18:1", + "referencedDeclaration": 398, + "src": "4676:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, "nodeType": "VariableDeclarationStatement", - "src": "4598:50:1" + "src": "4644:50:1" }, { "expression": { "argumentTypes": null, - "id": 767, + "id": 755, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 765, + "id": 753, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4658:18:1", + "referencedDeclaration": 398, + "src": "4704:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -18773,56 +18713,56 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 766, + "id": 754, "name": "new_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "4679:22:1", + "referencedDeclaration": 696, + "src": "4725:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4658:43:1", + "src": "4704:43:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 768, + "id": 756, "nodeType": "ExpressionStatement", - "src": "4658:43:1" + "src": "4704:43:1" }, { "assignments": [ - 770 + 758 ], "declarations": [ { "constant": false, - "id": 770, + "id": 758, "mutability": "mutable", "name": "new_guardian_set", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 800, - "src": "4712:35:1", + "scope": 788, + "src": "4758:35:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet" }, "typeName": { "contractScope": null, - "id": 769, + "id": 757, "name": "GuardianSet", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 367, - "src": "4712:11:1", + "referencedDeclaration": 368, + "src": "4758:11:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage_ptr", "typeString": "struct Wormhole.GuardianSet" } }, @@ -18830,18 +18770,18 @@ "visibility": "internal" } ], - "id": 775, + "id": 763, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 772, + "id": 760, "name": "new_guardians", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "4762:13:1", + "referencedDeclaration": 713, + "src": "4808:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" @@ -18850,14 +18790,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 773, + "id": 761, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4777:1:1", + "src": "4823:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -18877,18 +18817,18 @@ "typeString": "int_const 0" } ], - "id": 771, + "id": 759, "name": "GuardianSet", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 367, - "src": "4750:11:1", + "referencedDeclaration": 368, + "src": "4796:11:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_GuardianSet_$367_storage_ptr_$", + "typeIdentifier": "t_type$_t_struct$_GuardianSet_$368_storage_ptr_$", "typeString": "type(struct Wormhole.GuardianSet storage pointer)" } }, - "id": 774, + "id": 762, "isConstant": false, "isLValue": false, "isPure": false, @@ -18896,20 +18836,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4750:29:1", + "src": "4796:29:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, "nodeType": "VariableDeclarationStatement", - "src": "4712:67:1" + "src": "4758:67:1" }, { "expression": { "argumentTypes": null, - "id": 780, + "id": 768, "isConstant": false, "isLValue": false, "isPure": false, @@ -18918,26 +18858,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 776, + "id": 764, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "4789:13:1", + "referencedDeclaration": 396, + "src": "4835:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 778, + "id": 766, "indexExpression": { "argumentTypes": null, - "id": 777, + "id": 765, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "4803:18:1", + "referencedDeclaration": 398, + "src": "4849:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -18948,9 +18888,9 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "4789:33:1", + "src": "4835:33:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, @@ -18958,31 +18898,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 779, + "id": 767, "name": "new_guardian_set", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 770, - "src": "4825:16:1", + "referencedDeclaration": 758, + "src": "4871:16:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_memory_ptr", + "typeIdentifier": "t_struct$_GuardianSet_$368_memory_ptr", "typeString": "struct Wormhole.GuardianSet memory" } }, - "src": "4789:52:1", + "src": "4835:52:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 781, + "id": 769, "nodeType": "ExpressionStatement", - "src": "4789:52:1" + "src": "4835:52:1" }, { "expression": { "argumentTypes": null, - "id": 793, + "id": 781, "isConstant": false, "isLValue": false, "isPure": false, @@ -18993,26 +18933,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 782, + "id": 770, "name": "guardian_sets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 393, - "src": "4851:13:1", + "referencedDeclaration": 396, + "src": "4897:13:1", "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$367_storage_$", + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_GuardianSet_$368_storage_$", "typeString": "mapping(uint32 => struct Wormhole.GuardianSet storage ref)" } }, - "id": 784, + "id": 772, "indexExpression": { "argumentTypes": null, - "id": 783, + "id": 771, "name": "old_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 762, - "src": "4865:22:1", + "referencedDeclaration": 750, + "src": "4911:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -19023,21 +18963,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4851:37:1", + "src": "4897:37:1", "typeDescriptions": { - "typeIdentifier": "t_struct$_GuardianSet_$367_storage", + "typeIdentifier": "t_struct$_GuardianSet_$368_storage", "typeString": "struct Wormhole.GuardianSet storage ref" } }, - "id": 785, + "id": 773, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "memberName": "expiration_time", "nodeType": "MemberAccess", - "referencedDeclaration": 366, - "src": "4851:53:1", + "referencedDeclaration": 367, + "src": "4897:53:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -19051,7 +18991,7 @@ "typeIdentifier": "t_uint32", "typeString": "uint32" }, - "id": 792, + "id": 780, "isConstant": false, "isLValue": false, "isPure": false, @@ -19063,18 +19003,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 788, + "id": 776, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -4, - "src": "4914:5:1", + "src": "4960:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 789, + "id": 777, "isConstant": false, "isLValue": false, "isPure": false, @@ -19082,7 +19022,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "4914:15:1", + "src": "4960:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19096,29 +19036,29 @@ "typeString": "uint256" } ], - "id": 787, + "id": 775, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "4907:6:1", + "src": "4953:6:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint32_$", "typeString": "type(uint32)" }, "typeName": { - "id": 786, + "id": 774, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "4907:6:1", + "src": "4953:6:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 790, + "id": 778, "isConstant": false, "isLValue": false, "isPure": false, @@ -19126,7 +19066,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4907:23:1", + "src": "4953:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint32", @@ -19137,32 +19077,32 @@ "operator": "+", "rightExpression": { "argumentTypes": null, - "id": 791, - "name": "vaa_expiry", + "id": 779, + "name": "guardian_set_expirity", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 397, - "src": "4933:10:1", + "referencedDeclaration": 400, + "src": "4979:21:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4907:36:1", + "src": "4953:47:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "src": "4851:92:1", + "src": "4897:103:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" } }, - "id": 794, + "id": 782, "nodeType": "ExpressionStatement", - "src": "4851:92:1" + "src": "4897:103:1" }, { "eventCall": { @@ -19170,12 +19110,12 @@ "arguments": [ { "argumentTypes": null, - "id": 796, + "id": 784, "name": "old_guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 762, - "src": "4981:22:1", + "referencedDeclaration": 750, + "src": "5038:22:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -19183,12 +19123,12 @@ }, { "argumentTypes": null, - "id": 797, + "id": 785, "name": "guardian_set_index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 395, - "src": "5005:18:1", + "referencedDeclaration": 398, + "src": "5062:18:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -19206,18 +19146,18 @@ "typeString": "uint32" } ], - "id": 795, + "id": 783, "name": "LogGuardianSetChanged", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 373, - "src": "4959:21:1", + "referencedDeclaration": 374, + "src": "5016:21:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$", "typeString": "function (uint32,uint32)" } }, - "id": 798, + "id": 786, "isConstant": false, "isLValue": false, "isPure": false, @@ -19225,21 +19165,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4959:65:1", + "src": "5016:65:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 799, + "id": 787, "nodeType": "EmitStatement", - "src": "4954:70:1" + "src": "5011:70:1" } ] }, "documentation": null, - "id": 801, + "id": 789, "implemented": true, "kind": "function", "modifiers": [], @@ -19247,18 +19187,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 705, + "id": 693, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 704, + "id": 692, "mutability": "mutable", "name": "data", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 801, - "src": "4260:17:1", + "scope": 789, + "src": "4306:17:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -19266,10 +19206,10 @@ "typeString": "bytes" }, "typeName": { - "id": 703, + "id": 691, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "4260:5:1", + "src": "4306:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -19279,40 +19219,40 @@ "visibility": "internal" } ], - "src": "4259:19:1" + "src": "4305:19:1" }, "returnParameters": { - "id": 706, + "id": 694, "nodeType": "ParameterList", "parameters": [], - "src": "4287:0:1" + "src": "4333:0:1" }, - "scope": 1170, - "src": "4230:801:1", + "scope": 1175, + "src": "4276:812:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 927, + "id": 923, "nodeType": "Block", - "src": "5085:1325:1", + "src": "5142:1399:1", "statements": [ { "assignments": [ - 807 + 795 ], "declarations": [ { "constant": false, - "id": 807, + "id": 795, "mutability": "mutable", "name": "source_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5138:18:1", + "scope": 923, + "src": "5195:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19320,10 +19260,10 @@ "typeString": "uint8" }, "typeName": { - "id": 806, + "id": 794, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5138:5:1", + "src": "5195:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -19333,21 +19273,21 @@ "visibility": "internal" } ], - "id": 812, + "id": 800, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "34", - "id": 810, + "id": 798, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5172:1:1", + "src": "5229:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4_by_1", @@ -19365,18 +19305,18 @@ ], "expression": { "argumentTypes": null, - "id": 808, + "id": 796, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5159:4:1", + "referencedDeclaration": 791, + "src": "5216:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 809, + "id": 797, "isConstant": false, "isLValue": false, "isPure": false, @@ -19384,13 +19324,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5159:12:1", + "src": "5216:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 811, + "id": 799, "isConstant": false, "isLValue": false, "isPure": false, @@ -19398,7 +19338,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5159:15:1", + "src": "5216:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -19406,22 +19346,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5138:36:1" + "src": "5195:36:1" }, { "assignments": [ - 814 + 802 ], "declarations": [ { "constant": false, - "id": 814, + "id": 802, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5185:18:1", + "scope": 923, + "src": "5242:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19429,10 +19369,10 @@ "typeString": "uint8" }, "typeName": { - "id": 813, + "id": 801, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5185:5:1", + "src": "5242:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -19442,21 +19382,21 @@ "visibility": "internal" } ], - "id": 819, + "id": 807, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "35", - "id": 817, + "id": 805, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5219:1:1", + "src": "5276:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_5_by_1", @@ -19474,18 +19414,18 @@ ], "expression": { "argumentTypes": null, - "id": 815, + "id": 803, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5206:4:1", + "referencedDeclaration": 791, + "src": "5263:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 816, + "id": 804, "isConstant": false, "isLValue": false, "isPure": false, @@ -19493,13 +19433,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5206:12:1", + "src": "5263:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 818, + "id": 806, "isConstant": false, "isLValue": false, "isPure": false, @@ -19507,7 +19447,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5206:15:1", + "src": "5263:15:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -19515,22 +19455,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5185:36:1" + "src": "5242:36:1" }, { "assignments": [ - 821 + 809 ], "declarations": [ { "constant": false, - "id": 821, + "id": 809, "mutability": "mutable", "name": "target_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5340:22:1", + "scope": 923, + "src": "5397:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19538,10 +19478,10 @@ "typeString": "address" }, "typeName": { - "id": 820, + "id": 808, "name": "address", "nodeType": "ElementaryTypeName", - "src": "5340:7:1", + "src": "5397:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -19552,7 +19492,7 @@ "visibility": "internal" } ], - "id": 828, + "id": 816, "initialValue": { "argumentTypes": null, "arguments": [ @@ -19562,7 +19502,7 @@ "typeIdentifier": "t_rational_50_by_1", "typeString": "int_const 50" }, - "id": 826, + "id": 814, "isConstant": false, "isLValue": false, "isPure": true, @@ -19570,14 +19510,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3338", - "id": 824, + "id": 812, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5380:2:1", + "src": "5437:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_38_by_1", @@ -19590,14 +19530,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3132", - "id": 825, + "id": 813, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5385:2:1", + "src": "5442:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_12_by_1", @@ -19605,7 +19545,7 @@ }, "value": "12" }, - "src": "5380:7:1", + "src": "5437:7:1", "typeDescriptions": { "typeIdentifier": "t_rational_50_by_1", "typeString": "int_const 50" @@ -19621,18 +19561,18 @@ ], "expression": { "argumentTypes": null, - "id": 822, + "id": 810, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5365:4:1", + "referencedDeclaration": 791, + "src": "5422:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 823, + "id": 811, "isConstant": false, "isLValue": false, "isPure": false, @@ -19640,13 +19580,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "5365:14:1", + "src": "5422:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 827, + "id": 815, "isConstant": false, "isLValue": false, "isPure": false, @@ -19654,7 +19594,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5365:23:1", + "src": "5422:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -19662,22 +19602,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5340:48:1" + "src": "5397:48:1" }, { "assignments": [ - 830 + 818 ], "declarations": [ { "constant": false, - "id": 830, + "id": 818, "mutability": "mutable", "name": "token_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5399:17:1", + "scope": 923, + "src": "5456:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19685,10 +19625,10 @@ "typeString": "uint8" }, "typeName": { - "id": 829, + "id": 817, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "5399:5:1", + "src": "5456:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -19698,21 +19638,21 @@ "visibility": "internal" } ], - "id": 835, + "id": 823, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "3730", - "id": 833, + "id": 821, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5432:2:1", + "src": "5489:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_70_by_1", @@ -19730,18 +19670,18 @@ ], "expression": { "argumentTypes": null, - "id": 831, + "id": 819, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5419:4:1", + "referencedDeclaration": 791, + "src": "5476:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 832, + "id": 820, "isConstant": false, "isLValue": false, "isPure": false, @@ -19749,13 +19689,13 @@ "memberName": "toUint8", "nodeType": "MemberAccess", "referencedDeclaration": 109, - "src": "5419:12:1", + "src": "5476:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint8)" } }, - "id": 834, + "id": 822, "isConstant": false, "isLValue": false, "isPure": false, @@ -19763,7 +19703,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5419:16:1", + "src": "5476:16:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", @@ -19771,22 +19711,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5399:36:1" + "src": "5456:36:1" }, { "assignments": [ - 837 + 825 ], "declarations": [ { "constant": false, - "id": 837, + "id": 825, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 927, - "src": "5499:14:1", + "scope": 923, + "src": "5556:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -19794,10 +19734,10 @@ "typeString": "uint256" }, "typeName": { - "id": 836, + "id": 824, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5499:7:1", + "src": "5556:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -19807,50 +19747,50 @@ "visibility": "internal" } ], - "id": 842, + "id": 830, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "hexValue": "313033", - "id": 840, + "hexValue": "313034", + "id": 828, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5531:3:1", + "src": "5588:3:1", "subdenomination": null, "typeDescriptions": { - "typeIdentifier": "t_rational_103_by_1", - "typeString": "int_const 103" + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" }, - "value": "103" + "value": "104" } ], "expression": { "argumentTypes": [ { - "typeIdentifier": "t_rational_103_by_1", - "typeString": "int_const 103" + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" } ], "expression": { "argumentTypes": null, - "id": 838, + "id": 826, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5516:4:1", + "referencedDeclaration": 791, + "src": "5573:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 839, + "id": 827, "isConstant": false, "isLValue": false, "isPure": false, @@ -19858,13 +19798,13 @@ "memberName": "toUint256", "nodeType": "MemberAccess", "referencedDeclaration": 271, - "src": "5516:14:1", + "src": "5573:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (uint256)" } }, - "id": 841, + "id": 829, "isConstant": false, "isLValue": false, "isPure": false, @@ -19872,7 +19812,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5516:19:1", + "src": "5573:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -19880,7 +19820,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5499:36:1" + "src": "5556:36:1" }, { "expression": { @@ -19892,19 +19832,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 846, + "id": 834, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 844, + "id": 832, "name": "source_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 807, - "src": "5554:12:1", + "referencedDeclaration": 795, + "src": "5611:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -19914,18 +19854,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 845, + "id": 833, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "5570:12:1", + "referencedDeclaration": 802, + "src": "5627:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5554:28:1", + "src": "5611:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -19934,14 +19874,14 @@ { "argumentTypes": null, "hexValue": "73616d6520636861696e207472616e736665727320617265206e6f7420737570706f72746564", - "id": 847, + "id": 835, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5584:40:1", + "src": "5641:40:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e4bc00dc2f1f687d1ecd0a604d39e62ed5081a3cef70cb858e5f565f9bb7da23", @@ -19961,7 +19901,7 @@ "typeString": "literal_string \"same chain transfers are not supported\"" } ], - "id": 843, + "id": 831, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -19969,13 +19909,13 @@ -18 ], "referencedDeclaration": -18, - "src": "5546:7:1", + "src": "5603:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 848, + "id": 836, "isConstant": false, "isLValue": false, "isPure": false, @@ -19983,16 +19923,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5546:79:1", + "src": "5603:79:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 849, + "id": 837, "nodeType": "ExpressionStatement", - "src": "5546:79:1" + "src": "5603:79:1" }, { "expression": { @@ -20004,19 +19944,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 853, + "id": 841, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 851, + "id": 839, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "5643:12:1", + "referencedDeclaration": 802, + "src": "5700:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -20026,18 +19966,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 852, + "id": 840, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "5659:8:1", + "referencedDeclaration": 359, + "src": "5716:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5643:24:1", + "src": "5700:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -20046,14 +19986,14 @@ { "argumentTypes": null, "hexValue": "7472616e73666572206d75737420626520696e636f6d696e67", - "id": 854, + "id": 842, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5669:27:1", + "src": "5726:27:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_cbd36b1271ec4677f9b6b0ce3c590e298ab53454b431f3898527107beeed1a5a", @@ -20073,7 +20013,7 @@ "typeString": "literal_string \"transfer must be incoming\"" } ], - "id": 850, + "id": 838, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -20081,13 +20021,13 @@ -18 ], "referencedDeclaration": -18, - "src": "5635:7:1", + "src": "5692:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 855, + "id": 843, "isConstant": false, "isLValue": false, "isPure": false, @@ -20095,16 +20035,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5635:62:1", + "src": "5692:62:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 856, + "id": 844, "nodeType": "ExpressionStatement", - "src": "5635:62:1" + "src": "5692:62:1" }, { "condition": { @@ -20113,19 +20053,19 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, - "id": 859, + "id": 847, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 857, + "id": 845, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "5712:11:1", + "referencedDeclaration": 818, + "src": "5769:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -20135,42 +20075,42 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 858, + "id": 846, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "5727:8:1", + "referencedDeclaration": 359, + "src": "5784:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "5712:23:1", + "src": "5769:23:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 925, + "id": 921, "nodeType": "Block", - "src": "6259:145:1", + "src": "6390:145:1", "statements": [ { "assignments": [ - 909 + 905 ], "declarations": [ { "constant": false, - "id": 909, + "id": 905, "mutability": "mutable", "name": "token_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 925, - "src": "6273:21:1", + "scope": 921, + "src": "6404:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20178,10 +20118,10 @@ "typeString": "address" }, "typeName": { - "id": 908, + "id": 904, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6273:7:1", + "src": "6404:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -20192,7 +20132,7 @@ "visibility": "internal" } ], - "id": 916, + "id": 912, "initialValue": { "argumentTypes": null, "arguments": [ @@ -20202,7 +20142,7 @@ "typeIdentifier": "t_rational_83_by_1", "typeString": "int_const 83" }, - "id": 914, + "id": 910, "isConstant": false, "isLValue": false, "isPure": true, @@ -20210,14 +20150,14 @@ "leftExpression": { "argumentTypes": null, "hexValue": "3731", - "id": 912, + "id": 908, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6312:2:1", + "src": "6443:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -20230,14 +20170,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "3132", - "id": 913, + "id": 909, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6317:2:1", + "src": "6448:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_12_by_1", @@ -20245,7 +20185,7 @@ }, "value": "12" }, - "src": "6312:7:1", + "src": "6443:7:1", "typeDescriptions": { "typeIdentifier": "t_rational_83_by_1", "typeString": "int_const 83" @@ -20261,18 +20201,18 @@ ], "expression": { "argumentTypes": null, - "id": 910, + "id": 906, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "6297:4:1", + "referencedDeclaration": 791, + "src": "6428:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 911, + "id": 907, "isConstant": false, "isLValue": false, "isPure": false, @@ -20280,13 +20220,13 @@ "memberName": "toAddress", "nodeType": "MemberAccess", "referencedDeclaration": 82, - "src": "6297:14:1", + "src": "6428:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (address)" } }, - "id": 915, + "id": 911, "isConstant": false, "isLValue": false, "isPure": false, @@ -20294,7 +20234,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6297:23:1", + "src": "6428:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -20302,7 +20242,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "6273:47:1" + "src": "6404:47:1" }, { "expression": { @@ -20310,12 +20250,12 @@ "arguments": [ { "argumentTypes": null, - "id": 921, + "id": 917, "name": "target_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "6370:14:1", + "referencedDeclaration": 809, + "src": "6501:14:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20323,12 +20263,12 @@ }, { "argumentTypes": null, - "id": 922, + "id": 918, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 837, - "src": "6386:6:1", + "referencedDeclaration": 825, + "src": "6517:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -20351,12 +20291,12 @@ "arguments": [ { "argumentTypes": null, - "id": 918, + "id": 914, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 909, - "src": "6342:13:1", + "referencedDeclaration": 905, + "src": "6473:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20370,18 +20310,18 @@ "typeString": "address" } ], - "id": 917, + "id": 913, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "6335:6:1", + "referencedDeclaration": 2536, + "src": "6466:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 919, + "id": 915, "isConstant": false, "isLValue": false, "isPure": false, @@ -20389,28 +20329,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6335:21:1", + "src": "6466:21:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 920, + "id": 916, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "safeTransfer", "nodeType": "MemberAccess", - "referencedDeclaration": 2056, - "src": "6335:34:1", + "referencedDeclaration": 2570, + "src": "6466:34:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2022_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2536_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2536_$", "typeString": "function (contract IERC20,address,uint256)" } }, - "id": 923, + "id": 919, "isConstant": false, "isLValue": false, "isPure": false, @@ -20418,41 +20358,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6335:58:1", + "src": "6466:58:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 924, + "id": 920, "nodeType": "ExpressionStatement", - "src": "6335:58:1" + "src": "6466:58:1" } ] }, - "id": 926, + "id": 922, "nodeType": "IfStatement", - "src": "5708:696:1", + "src": "5765:770:1", "trueBody": { - "id": 907, + "id": 903, "nodeType": "Block", - "src": "5737:516:1", + "src": "5794:590:1", "statements": [ { "assignments": [ - 861 + 849 ], "declarations": [ { "constant": false, - "id": 861, + "id": 849, "mutability": "mutable", "name": "token_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5751:21:1", + "scope": 903, + "src": "5808:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20460,10 +20400,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 860, + "id": 848, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "5751:7:1", + "src": "5808:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -20473,21 +20413,21 @@ "visibility": "internal" } ], - "id": 866, + "id": 854, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "3731", - "id": 864, + "id": 852, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5790:2:1", + "src": "5847:2:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_71_by_1", @@ -20505,18 +20445,18 @@ ], "expression": { "argumentTypes": null, - "id": 862, + "id": 850, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 803, - "src": "5775:4:1", + "referencedDeclaration": 791, + "src": "5832:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, - "id": 863, + "id": 851, "isConstant": false, "isLValue": false, "isPure": false, @@ -20524,13 +20464,13 @@ "memberName": "toBytes32", "nodeType": "MemberAccess", "referencedDeclaration": 298, - "src": "5775:14:1", + "src": "5832:14:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$", "typeString": "function (bytes memory,uint256) pure returns (bytes32)" } }, - "id": 865, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -20538,7 +20478,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5775:18:1", + "src": "5832:18:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -20546,22 +20486,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5751:42:1" + "src": "5808:42:1" }, { "assignments": [ - 868 + 856 ], "declarations": [ { "constant": false, - "id": 868, + "id": 856, "mutability": "mutable", "name": "asset_id", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5807:16:1", + "scope": 903, + "src": "5864:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20569,10 +20509,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 867, + "id": 855, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "5807:7:1", + "src": "5864:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -20582,7 +20522,7 @@ "visibility": "internal" } ], - "id": 876, + "id": 864, "initialValue": { "argumentTypes": null, "arguments": [ @@ -20591,12 +20531,12 @@ "arguments": [ { "argumentTypes": null, - "id": 872, + "id": 860, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "5853:11:1", + "referencedDeclaration": 818, + "src": "5910:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -20604,12 +20544,12 @@ }, { "argumentTypes": null, - "id": 873, + "id": 861, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 861, - "src": "5866:13:1", + "referencedDeclaration": 849, + "src": "5923:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -20629,18 +20569,18 @@ ], "expression": { "argumentTypes": null, - "id": 870, + "id": 858, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -1, - "src": "5836:3:1", + "src": "5893:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 871, + "id": 859, "isConstant": false, "isLValue": false, "isPure": true, @@ -20648,13 +20588,13 @@ "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "5836:16:1", + "src": "5893:16:1", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 874, + "id": 862, "isConstant": false, "isLValue": false, "isPure": false, @@ -20662,7 +20602,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5836:44:1", + "src": "5893:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -20677,18 +20617,18 @@ "typeString": "bytes memory" } ], - "id": 869, + "id": 857, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, - "src": "5826:9:1", + "src": "5883:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 875, + "id": 863, "isConstant": false, "isLValue": false, "isPure": false, @@ -20696,7 +20636,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5826:55:1", + "src": "5883:55:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -20704,22 +20644,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "5807:74:1" + "src": "5864:74:1" }, { "assignments": [ - 878 + 866 ], "declarations": [ { "constant": false, - "id": 878, + "id": 866, "mutability": "mutable", "name": "wrapped_asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 907, - "src": "5973:21:1", + "scope": 903, + "src": "6030:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -20727,10 +20667,10 @@ "typeString": "address" }, "typeName": { - "id": 877, + "id": 865, "name": "address", "nodeType": "ElementaryTypeName", - "src": "5973:7:1", + "src": "6030:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -20741,31 +20681,31 @@ "visibility": "internal" } ], - "id": 882, + "id": 870, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 879, + "id": 867, "name": "wrappedAssets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "5997:13:1", + "referencedDeclaration": 408, + "src": "6054:13:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" } }, - "id": 881, + "id": 869, "indexExpression": { "argumentTypes": null, - "id": 880, + "id": 868, "name": "asset_id", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 868, - "src": "6011:8:1", + "referencedDeclaration": 856, + "src": "6068:8:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -20776,14 +20716,14 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "5997:23:1", + "src": "6054:23:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "5973:47:1" + "src": "6030:47:1" }, { "condition": { @@ -20792,19 +20732,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 888, + "id": 876, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 883, + "id": 871, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6038:13:1", + "referencedDeclaration": 866, + "src": "6095:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20818,14 +20758,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 886, + "id": 874, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6063:1:1", + "src": "6120:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -20841,29 +20781,29 @@ "typeString": "int_const 0" } ], - "id": 885, + "id": 873, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "6055:7:1", + "src": "6112:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 884, + "id": 872, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6055:7:1", + "src": "6112:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 887, + "id": 875, "isConstant": false, "isLValue": false, "isPure": true, @@ -20871,44 +20811,153 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6055:10:1", + "src": "6112:10:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "6038:27:1", + "src": "6095:27:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 898, + "id": 894, "nodeType": "IfStatement", - "src": "6034:138:1", + "src": "6091:212:1", "trueBody": { - "id": 897, + "id": 893, "nodeType": "Block", - "src": "6067:105:1", + "src": "6124:179:1", "statements": [ + { + "assignments": [ + 878 + ], + "declarations": [ + { + "constant": false, + "id": 878, + "mutability": "mutable", + "name": "asset_decimals", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 893, + "src": "6142:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 877, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "6142:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 883, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "313033", + "id": 881, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6178:3:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + }, + "value": "103" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + } + ], + "expression": { + "argumentTypes": null, + "id": 879, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 791, + "src": "6165:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUint8", + "nodeType": "MemberAccess", + "referencedDeclaration": 109, + "src": "6165:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory,uint256) pure returns (uint8)" + } + }, + "id": 882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6165:17:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6142:40:1" + }, { "expression": { "argumentTypes": null, - "id": 895, + "id": 891, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 889, + "id": 884, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6085:13:1", + "referencedDeclaration": 866, + "src": "6200:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -20921,12 +20970,12 @@ "arguments": [ { "argumentTypes": null, - "id": 891, + "id": 886, "name": "asset_id", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 868, - "src": "6120:8:1", + "referencedDeclaration": 856, + "src": "6235:8:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -20934,12 +20983,12 @@ }, { "argumentTypes": null, - "id": 892, + "id": 887, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 830, - "src": "6130:11:1", + "referencedDeclaration": 818, + "src": "6245:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -20947,16 +20996,29 @@ }, { "argumentTypes": null, - "id": 893, + "id": 888, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 861, - "src": "6143:13:1", + "referencedDeclaration": 849, + "src": "6258:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } + }, + { + "argumentTypes": null, + "id": 889, + "name": "asset_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 878, + "src": "6273:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } } ], "expression": { @@ -20972,20 +21034,24 @@ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" } ], - "id": 890, + "id": 885, "name": "deployWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "6101:18:1", + "referencedDeclaration": 967, + "src": "6216:18:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint8_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32) returns (address)" + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_uint8_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,uint8) returns (address)" } }, - "id": 894, + "id": 890, "isConstant": false, "isLValue": false, "isPure": false, @@ -20993,22 +21059,22 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6101:56:1", + "src": "6216:72:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "6085:72:1", + "src": "6200:88:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 896, + "id": 892, "nodeType": "ExpressionStatement", - "src": "6085:72:1" + "src": "6200:88:1" } ] } @@ -21019,12 +21085,12 @@ "arguments": [ { "argumentTypes": null, - "id": 903, + "id": 899, "name": "target_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "6219:14:1", + "referencedDeclaration": 809, + "src": "6350:14:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21032,12 +21098,12 @@ }, { "argumentTypes": null, - "id": 904, + "id": 900, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 837, - "src": "6235:6:1", + "referencedDeclaration": 825, + "src": "6366:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21060,12 +21126,12 @@ "arguments": [ { "argumentTypes": null, - "id": 900, + "id": 896, "name": "wrapped_asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 878, - "src": "6199:13:1", + "referencedDeclaration": 866, + "src": "6330:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21079,18 +21145,18 @@ "typeString": "address" } ], - "id": 899, + "id": 895, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "6186:12:1", + "referencedDeclaration": 1732, + "src": "6317:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 901, + "id": 897, "isConstant": false, "isLValue": false, "isPure": false, @@ -21098,28 +21164,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6186:27:1", + "src": "6317:27:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 902, + "id": 898, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mint", "nodeType": "MemberAccess", - "referencedDeclaration": 1263, - "src": "6186:32:1", + "referencedDeclaration": 1270, + "src": "6317:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256) external" } }, - "id": 905, + "id": 901, "isConstant": false, "isLValue": false, "isPure": false, @@ -21127,16 +21193,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6186:56:1", + "src": "6317:56:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 906, + "id": 902, "nodeType": "ExpressionStatement", - "src": "6186:56:1" + "src": "6317:56:1" } ] } @@ -21144,7 +21210,7 @@ ] }, "documentation": null, - "id": 928, + "id": 924, "implemented": true, "kind": "function", "modifiers": [], @@ -21152,18 +21218,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 804, + "id": 792, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 803, + "id": 791, "mutability": "mutable", "name": "data", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 928, - "src": "5058:17:1", + "scope": 924, + "src": "5115:17:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -21171,10 +21237,10 @@ "typeString": "bytes" }, "typeName": { - "id": 802, + "id": 790, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "5058:5:1", + "src": "5115:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -21184,40 +21250,40 @@ "visibility": "internal" } ], - "src": "5057:19:1" + "src": "5114:19:1" }, "returnParameters": { - "id": 805, + "id": 793, "nodeType": "ParameterList", "parameters": [], - "src": "5085:0:1" + "src": "5142:0:1" }, - "scope": 1170, - "src": "5037:1373:1", + "scope": 1175, + "src": "5094:1447:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 967, + "id": 966, "nodeType": "Block", - "src": "6531:791:1", + "src": "6678:808:1", "statements": [ { "assignments": [ - 940 + 938 ], "declarations": [ { "constant": false, - "id": 940, + "id": 938, "mutability": "mutable", "name": "targetBytes", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 967, - "src": "6709:19:1", + "scope": 966, + "src": "6856:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21225,10 +21291,10 @@ "typeString": "bytes20" }, "typeName": { - "id": 939, + "id": 937, "name": "bytes20", "nodeType": "ElementaryTypeName", - "src": "6709:7:1", + "src": "6856:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes20", "typeString": "bytes20" @@ -21238,18 +21304,18 @@ "visibility": "internal" } ], - "id": 945, + "id": 943, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 943, + "id": 941, "name": "wrappedAssetMaster", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 355, - "src": "6739:18:1", + "referencedDeclaration": 356, + "src": "6886:18:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21263,29 +21329,29 @@ "typeString": "address" } ], - "id": 942, + "id": 940, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "6731:7:1", + "src": "6878:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes20_$", "typeString": "type(bytes20)" }, "typeName": { - "id": 941, + "id": 939, "name": "bytes20", "nodeType": "ElementaryTypeName", - "src": "6731:7:1", + "src": "6878:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 944, + "id": 942, "isConstant": false, "isLValue": false, "isPure": false, @@ -21293,7 +21359,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6731:27:1", + "src": "6878:27:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes20", @@ -21301,22 +21367,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "6709:49:1" + "src": "6856:49:1" }, { "AST": { "nodeType": "YulBlock", - "src": "6777:341:1", + "src": "6924:348:1", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6791:24:1", + "src": "6938:24:1", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "6810:4:1", + "src": "6957:4:1", "type": "", "value": "0x40" } @@ -21324,16 +21390,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "6804:5:1" + "src": "6951:5:1" }, "nodeType": "YulFunctionCall", - "src": "6804:11:1" + "src": "6951:11:1" }, "variables": [ { "name": "clone", "nodeType": "YulTypedName", - "src": "6795:5:1", + "src": "6942:5:1", "type": "" } ] @@ -21344,12 +21410,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6835:5:1" + "src": "6982:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6842:66:1", + "src": "6989:66:1", "type": "", "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000" } @@ -21357,13 +21423,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6828:6:1" + "src": "6975:6:1" }, "nodeType": "YulFunctionCall", - "src": "6828:81:1" + "src": "6975:81:1" }, "nodeType": "YulExpressionStatement", - "src": "6828:81:1" + "src": "6975:81:1" }, { "expression": { @@ -21373,12 +21439,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6933:5:1" + "src": "7080:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6940:4:1", + "src": "7087:4:1", "type": "", "value": "0x14" } @@ -21386,27 +21452,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6929:3:1" + "src": "7076:3:1" }, "nodeType": "YulFunctionCall", - "src": "6929:16:1" + "src": "7076:16:1" }, { "name": "targetBytes", "nodeType": "YulIdentifier", - "src": "6947:11:1" + "src": "7094:11:1" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6922:6:1" + "src": "7069:6:1" }, "nodeType": "YulFunctionCall", - "src": "6922:37:1" + "src": "7069:37:1" }, "nodeType": "YulExpressionStatement", - "src": "6922:37:1" + "src": "7069:37:1" }, { "expression": { @@ -21416,12 +21482,12 @@ { "name": "clone", "nodeType": "YulIdentifier", - "src": "6983:5:1" + "src": "7130:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6990:4:1", + "src": "7137:4:1", "type": "", "value": "0x28" } @@ -21429,15 +21495,15 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6979:3:1" + "src": "7126:3:1" }, "nodeType": "YulFunctionCall", - "src": "6979:16:1" + "src": "7126:16:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6997:66:1", + "src": "7144:66:1", "type": "", "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000" } @@ -21445,52 +21511,57 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6972:6:1" + "src": "7119:6:1" }, "nodeType": "YulFunctionCall", - "src": "6972:92:1" + "src": "7119:92:1" }, "nodeType": "YulExpressionStatement", - "src": "6972:92:1" + "src": "7119:92:1" }, { "nodeType": "YulAssignment", - "src": "7077:31:1", + "src": "7224:38:1", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "7093:1:1", + "src": "7241:1:1", "type": "", "value": "0" }, { "name": "clone", "nodeType": "YulIdentifier", - "src": "7096:5:1" + "src": "7244:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7103:4:1", + "src": "7251:4:1", "type": "", "value": "0x37" + }, + { + "name": "seed", + "nodeType": "YulIdentifier", + "src": "7257:4:1" } ], "functionName": { - "name": "create", + "name": "create2", "nodeType": "YulIdentifier", - "src": "7086:6:1" + "src": "7233:7:1" }, "nodeType": "YulFunctionCall", - "src": "7086:22:1" + "src": "7233:29:1" }, "variableNames": [ { "name": "asset", "nodeType": "YulIdentifier", - "src": "7077:5:1" + "src": "7224:5:1" } ] } @@ -21499,23 +21570,30 @@ "evmVersion": "istanbul", "externalReferences": [ { - "declaration": 937, + "declaration": 935, "isOffset": false, "isSlot": false, - "src": "7077:5:1", + "src": "7224:5:1", "valueSize": 1 }, { - "declaration": 940, + "declaration": 926, "isOffset": false, "isSlot": false, - "src": "6947:11:1", + "src": "7257:4:1", + "valueSize": 1 + }, + { + "declaration": 938, + "isOffset": false, + "isSlot": false, + "src": "7094:11:1", "valueSize": 1 } ], - "id": 946, + "id": 944, "nodeType": "InlineAssembly", - "src": "6768:350:1" + "src": "6915:357:1" }, { "expression": { @@ -21523,12 +21601,12 @@ "arguments": [ { "argumentTypes": null, - "id": 951, + "id": 949, "name": "token_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 932, - "src": "7187:11:1", + "referencedDeclaration": 928, + "src": "7341:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -21536,16 +21614,29 @@ }, { "argumentTypes": null, - "id": 952, + "id": 950, "name": "token_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "7200:13:1", + "referencedDeclaration": 930, + "src": "7354:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } + }, + { + "argumentTypes": null, + "id": 951, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 932, + "src": "7369:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } } ], "expression": { @@ -21557,6 +21648,10 @@ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" } ], "expression": { @@ -21564,12 +21659,12 @@ "arguments": [ { "argumentTypes": null, - "id": 948, + "id": 946, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7169:5:1", + "referencedDeclaration": 935, + "src": "7323:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21583,18 +21678,18 @@ "typeString": "address" } ], - "id": 947, + "id": 945, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7156:12:1", + "referencedDeclaration": 1732, + "src": "7310:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 949, + "id": 947, "isConstant": false, "isLValue": false, "isPure": false, @@ -21602,28 +21697,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7156:19:1", + "src": "7310:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 950, + "id": 948, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "initialize", "nodeType": "MemberAccess", - "referencedDeclaration": 1242, - "src": "7156:30:1", + "referencedDeclaration": 1249, + "src": "7310:30:1", "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint8_$_t_bytes32_$returns$__$", - "typeString": "function (uint8,bytes32) external" + "typeIdentifier": "t_function_external_nonpayable$_t_uint8_$_t_bytes32_$_t_uint8_$returns$__$", + "typeString": "function (uint8,bytes32,uint8) external" } }, - "id": 953, + "id": 952, "isConstant": false, "isLValue": false, "isPure": false, @@ -21631,21 +21726,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7156:58:1", + "src": "7310:68:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 954, + "id": 953, "nodeType": "ExpressionStatement", - "src": "7156:58:1" + "src": "7310:68:1" }, { "expression": { "argumentTypes": null, - "id": 959, + "id": 958, "isConstant": false, "isLValue": false, "isPure": false, @@ -21654,26 +21749,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 955, + "id": 954, "name": "wrappedAssets", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "7250:13:1", + "referencedDeclaration": 408, + "src": "7414:13:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", "typeString": "mapping(bytes32 => address)" } }, - "id": 957, + "id": 956, "indexExpression": { "argumentTypes": null, - "id": 956, + "id": 955, "name": "seed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "7264:4:1", + "referencedDeclaration": 926, + "src": "7428:4:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -21684,7 +21779,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7250:19:1", + "src": "7414:19:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21694,31 +21789,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 958, + "id": 957, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7272:5:1", + "referencedDeclaration": 935, + "src": "7436:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7250:27:1", + "src": "7414:27:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 960, + "id": 959, "nodeType": "ExpressionStatement", - "src": "7250:27:1" + "src": "7414:27:1" }, { "expression": { "argumentTypes": null, - "id": 965, + "id": 964, "isConstant": false, "isLValue": false, "isPure": false, @@ -21727,26 +21822,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 961, + "id": 960, "name": "isWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "7287:14:1", + "referencedDeclaration": 412, + "src": "7451:14:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" } }, - "id": 963, + "id": 962, "indexExpression": { "argumentTypes": null, - "id": 962, + "id": 961, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 937, - "src": "7302:5:1", + "referencedDeclaration": 935, + "src": "7466:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -21757,7 +21852,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7287:21:1", + "src": "7451:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21768,14 +21863,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 964, + "id": 963, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "7311:4:1", + "src": "7475:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -21783,20 +21878,20 @@ }, "value": "true" }, - "src": "7287:28:1", + "src": "7451:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 966, + "id": 965, "nodeType": "ExpressionStatement", - "src": "7287:28:1" + "src": "7451:28:1" } ] }, "documentation": null, - "id": 968, + "id": 967, "implemented": true, "kind": "function", "modifiers": [], @@ -21804,18 +21899,74 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 935, + "id": 933, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 930, + "id": 926, "mutability": "mutable", "name": "seed", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6444:12:1", + "scope": 967, + "src": "6575:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 925, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6575:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 928, + "mutability": "mutable", + "name": "token_chain", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 967, + "src": "6589:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 927, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "6589:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 930, + "mutability": "mutable", + "name": "token_address", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 967, + "src": "6608:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21826,7 +21977,7 @@ "id": 929, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "6444:7:1", + "src": "6608:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -21839,11 +21990,11 @@ "constant": false, "id": 932, "mutability": "mutable", - "name": "token_chain", + "name": "decimals", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6458:17:1", + "scope": 967, + "src": "6631:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21854,7 +22005,7 @@ "id": 931, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "6458:5:1", + "src": "6631:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -21862,51 +22013,23 @@ }, "value": null, "visibility": "internal" - }, - { - "constant": false, - "id": 934, - "mutability": "mutable", - "name": "token_address", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 968, - "src": "6477:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 933, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6477:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" } ], - "src": "6443:56:1" + "src": "6574:72:1" }, "returnParameters": { - "id": 938, + "id": 936, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 937, + "id": 935, "mutability": "mutable", "name": "asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 968, - "src": "6517:13:1", + "scope": 967, + "src": "6664:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -21914,10 +22037,10 @@ "typeString": "address" }, "typeName": { - "id": 936, + "id": 934, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6517:7:1", + "src": "6664:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -21928,19 +22051,19 @@ "visibility": "internal" } ], - "src": "6516:15:1" + "src": "6663:15:1" }, - "scope": 1170, - "src": "6416:906:1", + "scope": 1175, + "src": "6547:939:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "private" }, { "body": { - "id": 1099, + "id": 1103, "nodeType": "Block", - "src": "7526:1034:1", + "src": "7662:1059:1", "statements": [ { "expression": { @@ -21952,19 +22075,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 986, + "id": 985, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 984, + "id": 983, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "7544:6:1", + "referencedDeclaration": 971, + "src": "7680:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -21975,14 +22098,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 985, + "id": 984, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "7554:1:1", + "src": "7690:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -21990,7 +22113,7 @@ }, "value": "0" }, - "src": "7544:11:1", + "src": "7680:11:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -21999,14 +22122,14 @@ { "argumentTypes": null, "hexValue": "616d6f756e74206d757374206e6f742062652030", - "id": 987, + "id": 986, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "7557:22:1", + "src": "7693:22:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c3143f59cb0e580c5873dd9b2860385487237680573a0afd40e8c0860e76a5d3", @@ -22026,7 +22149,7 @@ "typeString": "literal_string \"amount must not be 0\"" } ], - "id": 983, + "id": 982, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -22034,13 +22157,13 @@ -18 ], "referencedDeclaration": -18, - "src": "7536:7:1", + "src": "7672:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 988, + "id": 987, "isConstant": false, "isLValue": false, "isPure": false, @@ -22048,31 +22171,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7536:44:1", + "src": "7672:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 989, + "id": 988, "nodeType": "ExpressionStatement", - "src": "7536:44:1" + "src": "7672:44:1" }, { "assignments": [ - 991 + 990 ], "declarations": [ { "constant": false, - "id": 991, + "id": 990, "mutability": "mutable", "name": "asset_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1099, - "src": "7591:17:1", + "scope": 1103, + "src": "7727:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22080,10 +22203,10 @@ "typeString": "uint8" }, "typeName": { - "id": 990, + "id": 989, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "7591:5:1", + "src": "7727:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -22093,37 +22216,37 @@ "visibility": "internal" } ], - "id": 993, + "id": 992, "initialValue": { "argumentTypes": null, - "id": 992, + "id": 991, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "7611:8:1", + "referencedDeclaration": 359, + "src": "7747:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "VariableDeclarationStatement", - "src": "7591:28:1" + "src": "7727:28:1" }, { "assignments": [ - 995 + 994 ], "declarations": [ { "constant": false, - "id": 995, + "id": 994, "mutability": "mutable", "name": "asset_address", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1099, - "src": "7629:21:1", + "scope": 1103, + "src": "7765:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22131,10 +22254,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 994, + "id": 993, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7629:7:1", + "src": "7765:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -22144,36 +22267,36 @@ "visibility": "internal" } ], - "id": 996, + "id": 995, "initialValue": null, "nodeType": "VariableDeclarationStatement", - "src": "7629:21:1" + "src": "7765:21:1" }, { "condition": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 997, + "id": 996, "name": "isWrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "7664:14:1", + "referencedDeclaration": 412, + "src": "7800:14:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" } }, - "id": 999, + "id": 998, "indexExpression": { "argumentTypes": null, - "id": 998, + "id": 997, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7679:5:1", + "referencedDeclaration": 969, + "src": "7815:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22184,31 +22307,31 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7664:21:1", + "src": "7800:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 1080, + "id": 1079, "nodeType": "Block", - "src": "7886:539:1", + "src": "8022:539:1", "statements": [ { "assignments": [ - 1027 + 1026 ], "declarations": [ { "constant": false, - "id": 1027, + "id": 1026, "mutability": "mutable", "name": "balanceBefore", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1080, - "src": "7900:21:1", + "scope": 1079, + "src": "8036:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22216,10 +22339,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1026, + "id": 1025, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7900:7:1", + "src": "8036:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22229,7 +22352,7 @@ "visibility": "internal" } ], - "id": 1037, + "id": 1036, "initialValue": { "argumentTypes": null, "arguments": [ @@ -22238,14 +22361,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1034, + "id": 1033, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "7956:4:1", + "src": "8092:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -22253,33 +22376,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1033, + "id": 1032, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "7948:7:1", + "src": "8084:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1032, + "id": 1031, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7948:7:1", + "src": "8084:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1035, + "id": 1034, "isConstant": false, "isLValue": false, "isPure": false, @@ -22287,7 +22410,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7948:13:1", + "src": "8084:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -22307,12 +22430,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1029, + "id": 1028, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7931:5:1", + "referencedDeclaration": 969, + "src": "8067:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22326,18 +22449,18 @@ "typeString": "address" } ], - "id": 1028, + "id": 1027, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "7924:6:1", + "referencedDeclaration": 2536, + "src": "8060:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1030, + "id": 1029, "isConstant": false, "isLValue": false, "isPure": false, @@ -22345,28 +22468,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7924:13:1", + "src": "8060:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1031, + "id": 1030, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 1961, - "src": "7924:23:1", + "referencedDeclaration": 2475, + "src": "8060:23:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 1036, + "id": 1035, "isConstant": false, "isLValue": false, "isPure": false, @@ -22374,7 +22497,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7924:38:1", + "src": "8060:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -22382,7 +22505,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "7900:62:1" + "src": "8036:62:1" }, { "expression": { @@ -22392,18 +22515,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1042, + "id": 1041, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8007:3:1", + "src": "8143:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1043, + "id": 1042, "isConstant": false, "isLValue": false, "isPure": false, @@ -22411,7 +22534,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8007:10:1", + "src": "8143:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -22422,14 +22545,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1046, + "id": 1045, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "8027:4:1", + "src": "8163:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -22437,33 +22560,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1045, + "id": 1044, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8019:7:1", + "src": "8155:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1044, + "id": 1043, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8019:7:1", + "src": "8155:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1047, + "id": 1046, "isConstant": false, "isLValue": false, "isPure": false, @@ -22471,7 +22594,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8019:13:1", + "src": "8155:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -22480,12 +22603,12 @@ }, { "argumentTypes": null, - "id": 1048, + "id": 1047, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8034:6:1", + "referencedDeclaration": 971, + "src": "8170:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22512,12 +22635,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1039, + "id": 1038, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7983:5:1", + "referencedDeclaration": 969, + "src": "8119:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22531,18 +22654,18 @@ "typeString": "address" } ], - "id": 1038, + "id": 1037, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "7976:6:1", + "referencedDeclaration": 2536, + "src": "8112:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1040, + "id": 1039, "isConstant": false, "isLValue": false, "isPure": false, @@ -22550,28 +22673,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7976:13:1", + "src": "8112:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1041, + "id": 1040, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "safeTransferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 2081, - "src": "7976:30:1", + "referencedDeclaration": 2595, + "src": "8112:30:1", "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2022_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$2536_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$2536_$", "typeString": "function (contract IERC20,address,address,uint256)" } }, - "id": 1049, + "id": 1048, "isConstant": false, "isLValue": false, "isPure": false, @@ -22579,31 +22702,31 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7976:65:1", + "src": "8112:65:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1050, + "id": 1049, "nodeType": "ExpressionStatement", - "src": "7976:65:1" + "src": "8112:65:1" }, { "assignments": [ - 1052 + 1051 ], "declarations": [ { "constant": false, - "id": 1052, + "id": 1051, "mutability": "mutable", "name": "balanceAfter", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1080, - "src": "8055:20:1", + "scope": 1079, + "src": "8191:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22611,10 +22734,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1051, + "id": 1050, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8055:7:1", + "src": "8191:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22624,7 +22747,7 @@ "visibility": "internal" } ], - "id": 1062, + "id": 1061, "initialValue": { "argumentTypes": null, "arguments": [ @@ -22633,14 +22756,14 @@ "arguments": [ { "argumentTypes": null, - "id": 1059, + "id": 1058, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, - "src": "8110:4:1", + "src": "8246:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } } @@ -22648,33 +22771,33 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Wormhole_$1170", + "typeIdentifier": "t_contract$_Wormhole_$1175", "typeString": "contract Wormhole" } ], - "id": 1058, + "id": 1057, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8102:7:1", + "src": "8238:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1057, + "id": 1056, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8102:7:1", + "src": "8238:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1060, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -22682,7 +22805,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8102:13:1", + "src": "8238:13:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address_payable", @@ -22702,12 +22825,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1054, + "id": 1053, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "8085:5:1", + "referencedDeclaration": 969, + "src": "8221:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22721,18 +22844,18 @@ "typeString": "address" } ], - "id": 1053, + "id": 1052, "name": "IERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "8078:6:1", + "referencedDeclaration": 2536, + "src": "8214:6:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2022_$", + "typeIdentifier": "t_type$_t_contract$_IERC20_$2536_$", "typeString": "type(contract IERC20)" } }, - "id": 1055, + "id": 1054, "isConstant": false, "isLValue": false, "isPure": false, @@ -22740,28 +22863,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8078:13:1", + "src": "8214:13:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1056, + "id": 1055, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 1961, - "src": "8078:23:1", + "referencedDeclaration": 2475, + "src": "8214:23:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 1061, + "id": 1060, "isConstant": false, "isLValue": false, "isPure": false, @@ -22769,7 +22892,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8078:38:1", + "src": "8214:38:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -22777,24 +22900,24 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "8055:61:1" + "src": "8191:61:1" }, { "expression": { "argumentTypes": null, - "id": 1068, + "id": 1067, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1063, + "id": 1062, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8321:6:1", + "referencedDeclaration": 971, + "src": "8457:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22807,12 +22930,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1066, + "id": 1065, "name": "balanceBefore", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "8347:13:1", + "referencedDeclaration": 1026, + "src": "8483:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22828,32 +22951,32 @@ ], "expression": { "argumentTypes": null, - "id": 1064, + "id": 1063, "name": "balanceAfter", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "8330:12:1", + "referencedDeclaration": 1051, + "src": "8466:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1065, + "id": 1064, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1794, - "src": "8330:16:1", + "referencedDeclaration": 1801, + "src": "8466:16:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 1067, + "id": 1066, "isConstant": false, "isLValue": false, "isPure": false, @@ -22861,39 +22984,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8330:31:1", + "src": "8466:31:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "8321:40:1", + "src": "8457:40:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1069, + "id": 1068, "nodeType": "ExpressionStatement", - "src": "8321:40:1" + "src": "8457:40:1" }, { "expression": { "argumentTypes": null, - "id": 1078, + "id": 1077, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1070, + "id": 1069, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "8375:13:1", + "referencedDeclaration": 994, + "src": "8511:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -22909,12 +23032,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1075, + "id": 1074, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "8407:5:1", + "referencedDeclaration": 969, + "src": "8543:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -22928,29 +23051,29 @@ "typeString": "address" } ], - "id": 1074, + "id": 1073, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8399:7:1", + "src": "8535:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1073, + "id": 1072, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8399:7:1", + "src": "8535:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1076, + "id": 1075, "isConstant": false, "isLValue": false, "isPure": false, @@ -22958,7 +23081,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8399:14:1", + "src": "8535:14:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -22973,29 +23096,29 @@ "typeString": "uint256" } ], - "id": 1072, + "id": 1071, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8391:7:1", + "src": "8527:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1071, + "id": 1070, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8391:7:1", + "src": "8527:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1077, + "id": 1076, "isConstant": false, "isLValue": false, "isPure": false, @@ -23003,32 +23126,32 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8391:23:1", + "src": "8527:23:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "src": "8375:39:1", + "src": "8511:39:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 1079, + "id": 1078, "nodeType": "ExpressionStatement", - "src": "8375:39:1" + "src": "8511:39:1" } ] }, - "id": 1081, + "id": 1080, "nodeType": "IfStatement", - "src": "7660:765:1", + "src": "7796:765:1", "trueBody": { - "id": 1025, + "id": 1024, "nodeType": "Block", - "src": "7687:193:1", + "src": "7823:193:1", "statements": [ { "expression": { @@ -23038,18 +23161,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1004, + "id": 1003, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "7726:3:1", + "src": "7862:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1005, + "id": 1004, "isConstant": false, "isLValue": false, "isPure": false, @@ -23057,7 +23180,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "7726:10:1", + "src": "7862:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -23065,12 +23188,12 @@ }, { "argumentTypes": null, - "id": 1006, + "id": 1005, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "7738:6:1", + "referencedDeclaration": 971, + "src": "7874:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23093,12 +23216,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1001, + "id": 1000, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7714:5:1", + "referencedDeclaration": 969, + "src": "7850:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23112,18 +23235,18 @@ "typeString": "address" } ], - "id": 1000, + "id": 999, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7701:12:1", + "referencedDeclaration": 1732, + "src": "7837:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1002, + "id": 1001, "isConstant": false, "isLValue": false, "isPure": false, @@ -23131,28 +23254,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7701:19:1", + "src": "7837:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1003, + "id": 1002, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "burn", "nodeType": "MemberAccess", - "referencedDeclaration": 1284, - "src": "7701:24:1", + "referencedDeclaration": 1291, + "src": "7837:24:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256) external" } }, - "id": 1007, + "id": 1006, "isConstant": false, "isLValue": false, "isPure": false, @@ -23160,33 +23283,33 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7701:44:1", + "src": "7837:44:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1008, + "id": 1007, "nodeType": "ExpressionStatement", - "src": "7701:44:1" + "src": "7837:44:1" }, { "expression": { "argumentTypes": null, - "id": 1015, + "id": 1014, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1009, + "id": 1008, "name": "asset_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "7759:11:1", + "referencedDeclaration": 990, + "src": "7895:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -23204,12 +23327,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1011, + "id": 1010, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7786:5:1", + "referencedDeclaration": 969, + "src": "7922:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23223,18 +23346,18 @@ "typeString": "address" } ], - "id": 1010, + "id": 1009, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7773:12:1", + "referencedDeclaration": 1732, + "src": "7909:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1012, + "id": 1011, "isConstant": false, "isLValue": false, "isPure": false, @@ -23242,28 +23365,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7773:19:1", + "src": "7909:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1013, + "id": 1012, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "assetChain", "nodeType": "MemberAccess", - "referencedDeclaration": 1193, - "src": "7773:30:1", + "referencedDeclaration": 1198, + "src": "7909:30:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", "typeString": "function () view external returns (uint8)" } }, - "id": 1014, + "id": 1013, "isConstant": false, "isLValue": false, "isPure": false, @@ -23271,39 +23394,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7773:32:1", + "src": "7909:32:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "src": "7759:46:1", + "src": "7895:46:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, - "id": 1016, + "id": 1015, "nodeType": "ExpressionStatement", - "src": "7759:46:1" + "src": "7895:46:1" }, { "expression": { "argumentTypes": null, - "id": 1023, + "id": 1022, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 1017, + "id": 1016, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "7819:13:1", + "referencedDeclaration": 994, + "src": "7955:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -23321,12 +23444,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1019, + "id": 1018, "name": "asset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "7848:5:1", + "referencedDeclaration": 969, + "src": "7984:5:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23340,18 +23463,18 @@ "typeString": "address" } ], - "id": 1018, + "id": 1017, "name": "WrappedAsset", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1725, - "src": "7835:12:1", + "referencedDeclaration": 1732, + "src": "7971:12:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1725_$", + "typeIdentifier": "t_type$_t_contract$_WrappedAsset_$1732_$", "typeString": "type(contract WrappedAsset)" } }, - "id": 1020, + "id": 1019, "isConstant": false, "isLValue": false, "isPure": false, @@ -23359,28 +23482,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7835:19:1", + "src": "7971:19:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WrappedAsset_$1725", + "typeIdentifier": "t_contract$_WrappedAsset_$1732", "typeString": "contract WrappedAsset" } }, - "id": 1021, + "id": 1020, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "assetAddress", "nodeType": "MemberAccess", - "referencedDeclaration": 1195, - "src": "7835:32:1", + "referencedDeclaration": 1200, + "src": "7971:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", "typeString": "function () view external returns (bytes32)" } }, - "id": 1022, + "id": 1021, "isConstant": false, "isLValue": false, "isPure": false, @@ -23388,22 +23511,22 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7835:34:1", + "src": "7971:34:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "src": "7819:50:1", + "src": "7955:50:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 1024, + "id": 1023, "nodeType": "ExpressionStatement", - "src": "7819:50:1" + "src": "7955:50:1" } ] } @@ -23414,12 +23537,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1083, + "id": 1082, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "8456:12:1", + "referencedDeclaration": 975, + "src": "8592:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -23427,12 +23550,12 @@ }, { "argumentTypes": null, - "id": 1084, + "id": 1083, "name": "asset_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "8470:11:1", + "referencedDeclaration": 990, + "src": "8606:11:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -23440,12 +23563,96 @@ }, { "argumentTypes": null, - "id": 1085, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1085, + "name": "asset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 969, + "src": "8625:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1084, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2458, + "src": "8619:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$2458_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8619:12:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$2458", + "typeString": "contract ERC20" + } + }, + "id": 1087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 2034, + "src": "8619:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", + "typeString": "function () view external returns (uint8)" + } + }, + "id": 1088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8619:23:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "argumentTypes": null, + "id": 1089, "name": "asset_address", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "8483:13:1", + "referencedDeclaration": 994, + "src": "8644:13:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -23461,18 +23668,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1090, + "id": 1094, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8514:3:1", + "src": "8675:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1091, + "id": 1095, "isConstant": false, "isLValue": false, "isPure": false, @@ -23480,7 +23687,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8514:10:1", + "src": "8675:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -23494,29 +23701,29 @@ "typeString": "address payable" } ], - "id": 1089, + "id": 1093, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8506:7:1", + "src": "8667:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1088, + "id": 1092, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8506:7:1", + "src": "8667:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1092, + "id": 1096, "isConstant": false, "isLValue": false, "isPure": false, @@ -23524,7 +23731,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8506:19:1", + "src": "8667:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -23539,29 +23746,29 @@ "typeString": "uint256" } ], - "id": 1087, + "id": 1091, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8498:7:1", + "src": "8659:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1086, + "id": 1090, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8498:7:1", + "src": "8659:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1093, + "id": 1097, "isConstant": false, "isLValue": false, "isPure": false, @@ -23569,7 +23776,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8498:28:1", + "src": "8659:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -23578,12 +23785,12 @@ }, { "argumentTypes": null, - "id": 1094, + "id": 1098, "name": "recipient", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 974, - "src": "8528:9:1", + "referencedDeclaration": 973, + "src": "8689:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -23591,12 +23798,12 @@ }, { "argumentTypes": null, - "id": 1095, + "id": 1099, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "8539:6:1", + "referencedDeclaration": 971, + "src": "8700:6:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23604,12 +23811,12 @@ }, { "argumentTypes": null, - "id": 1096, + "id": 1100, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 978, - "src": "8547:5:1", + "referencedDeclaration": 977, + "src": "8708:5:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -23626,6 +23833,10 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -23647,18 +23858,18 @@ "typeString": "uint32" } ], - "id": 1082, + "id": 1081, "name": "LogTokensLocked", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 389, - "src": "8440:15:1", + "referencedDeclaration": 392, + "src": "8576:15:1", "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", - "typeString": "function (uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" + "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", + "typeString": "function (uint8,uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" } }, - "id": 1097, + "id": 1101, "isConstant": false, "isLValue": false, "isPure": false, @@ -23666,61 +23877,61 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8440:113:1", + "src": "8576:138:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1098, + "id": 1102, "nodeType": "EmitStatement", - "src": "8435:118:1" + "src": "8571:143:1" } ] }, "documentation": null, "functionSelector": "13cca1a9", - "id": 1100, + "id": 1104, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 981, + "id": 980, "modifierName": { "argumentTypes": null, - "id": 980, + "id": 979, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "7513:12:1", + "referencedDeclaration": 2992, + "src": "7649:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7513:12:1" + "src": "7649:12:1" } ], "name": "lockAssets", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 979, + "id": 978, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 970, + "id": 969, "mutability": "mutable", "name": "asset", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7385:13:1", + "scope": 1104, + "src": "7521:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23728,10 +23939,10 @@ "typeString": "address" }, "typeName": { - "id": 969, + "id": 968, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7385:7:1", + "src": "7521:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -23743,13 +23954,13 @@ }, { "constant": false, - "id": 972, + "id": 971, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7408:14:1", + "scope": 1104, + "src": "7544:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23757,10 +23968,10 @@ "typeString": "uint256" }, "typeName": { - "id": 971, + "id": 970, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7408:7:1", + "src": "7544:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23771,13 +23982,13 @@ }, { "constant": false, - "id": 974, + "id": 973, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7432:17:1", + "scope": 1104, + "src": "7568:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23785,10 +23996,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 973, + "id": 972, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7432:7:1", + "src": "7568:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -23799,13 +24010,13 @@ }, { "constant": false, - "id": 976, + "id": 975, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7459:18:1", + "scope": 1104, + "src": "7595:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23813,10 +24024,10 @@ "typeString": "uint8" }, "typeName": { - "id": 975, + "id": 974, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "7459:5:1", + "src": "7595:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -23827,13 +24038,13 @@ }, { "constant": false, - "id": 978, + "id": 977, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1100, - "src": "7487:12:1", + "scope": 1104, + "src": "7623:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23841,10 +24052,10 @@ "typeString": "uint32" }, "typeName": { - "id": 977, + "id": 976, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "7487:6:1", + "src": "7623:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -23854,25 +24065,25 @@ "visibility": "internal" } ], - "src": "7375:130:1" + "src": "7511:130:1" }, "returnParameters": { - "id": 982, + "id": 981, "nodeType": "ParameterList", "parameters": [], - "src": "7526:0:1" + "src": "7662:0:1" }, - "scope": 1170, - "src": "7356:1204:1", + "scope": 1175, + "src": "7492:1229:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "public" }, { "body": { - "id": 1152, + "id": 1157, "nodeType": "Block", - "src": "8694:330:1", + "src": "8855:334:1", "statements": [ { "expression": { @@ -23884,7 +24095,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1115, + "id": 1119, "isConstant": false, "isLValue": false, "isPure": false, @@ -23893,18 +24104,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1112, + "id": 1116, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8712:3:1", + "src": "8873:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1113, + "id": 1117, "isConstant": false, "isLValue": false, "isPure": false, @@ -23912,7 +24123,7 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8712:9:1", + "src": "8873:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23923,14 +24134,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1114, + "id": 1118, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8725:1:1", + "src": "8886:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -23938,7 +24149,7 @@ }, "value": "0" }, - "src": "8712:14:1", + "src": "8873:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23947,14 +24158,14 @@ { "argumentTypes": null, "hexValue": "616d6f756e74206d757374206e6f742062652030", - "id": 1116, + "id": 1120, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8728:22:1", + "src": "8889:22:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c3143f59cb0e580c5873dd9b2860385487237680573a0afd40e8c0860e76a5d3", @@ -23974,7 +24185,7 @@ "typeString": "literal_string \"amount must not be 0\"" } ], - "id": 1111, + "id": 1115, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -23982,13 +24193,13 @@ -18 ], "referencedDeclaration": -18, - "src": "8704:7:1", + "src": "8865:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1117, + "id": 1121, "isConstant": false, "isLValue": false, "isPure": false, @@ -23996,16 +24207,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8704:47:1", + "src": "8865:47:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1118, + "id": 1122, "nodeType": "ExpressionStatement", - "src": "8704:47:1" + "src": "8865:47:1" }, { "expression": { @@ -24020,12 +24231,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1120, + "id": 1124, "name": "WETHAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "8800:11:1", + "referencedDeclaration": 362, + "src": "8961:11:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24039,18 +24250,18 @@ "typeString": "address" } ], - "id": 1119, + "id": 1123, "name": "WETH", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "8795:4:1", + "referencedDeclaration": 1186, + "src": "8956:4:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_WETH_$1181_$", + "typeIdentifier": "t_type$_t_contract$_WETH_$1186_$", "typeString": "type(contract WETH)" } }, - "id": 1121, + "id": 1125, "isConstant": false, "isLValue": false, "isPure": true, @@ -24058,28 +24269,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8795:17:1", + "src": "8956:17:1", "tryCall": false, "typeDescriptions": { - "typeIdentifier": "t_contract$_WETH_$1181", + "typeIdentifier": "t_contract$_WETH_$1186", "typeString": "contract WETH" } }, - "id": 1122, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "deposit", "nodeType": "MemberAccess", - "referencedDeclaration": 1175, - "src": "8795:25:1", + "referencedDeclaration": 1180, + "src": "8956:25:1", "typeDescriptions": { "typeIdentifier": "t_function_external_payable$__$returns$__$", "typeString": "function () payable external" } }, - "id": 1125, + "id": 1129, "isConstant": false, "isLValue": false, "isPure": false, @@ -24093,18 +24304,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1123, + "id": 1127, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8829:3:1", + "src": "8990:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1124, + "id": 1128, "isConstant": false, "isLValue": false, "isPure": false, @@ -24112,20 +24323,20 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8829:9:1", + "src": "8990:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "src": "8795:44:1", + "src": "8956:44:1", "typeDescriptions": { "typeIdentifier": "t_function_external_payable$__$returns$__$value", "typeString": "function () payable external" } }, - "id": 1126, + "id": 1130, "isConstant": false, "isLValue": false, "isPure": false, @@ -24133,16 +24344,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8795:46:1", + "src": "8956:46:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1127, + "id": 1131, "nodeType": "ExpressionStatement", - "src": "8795:46:1" + "src": "8956:46:1" }, { "eventCall": { @@ -24150,12 +24361,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1129, + "id": 1133, "name": "target_chain", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1104, - "src": "8904:12:1", + "referencedDeclaration": 1108, + "src": "9065:12:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -24163,17 +24374,35 @@ }, { "argumentTypes": null, - "id": 1130, + "id": 1134, "name": "CHAIN_ID", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 358, - "src": "8918:8:1", + "referencedDeclaration": 359, + "src": "9079:8:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, + { + "argumentTypes": null, + "hexValue": "3138", + "id": 1135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9089:2:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, { "argumentTypes": null, "arguments": [ @@ -24182,12 +24411,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1135, + "id": 1140, "name": "WETHAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "8944:11:1", + "referencedDeclaration": 362, + "src": "9109:11:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24201,29 +24430,29 @@ "typeString": "address" } ], - "id": 1134, + "id": 1139, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8936:7:1", + "src": "9101:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1133, + "id": 1138, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8936:7:1", + "src": "9101:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1136, + "id": 1141, "isConstant": false, "isLValue": false, "isPure": true, @@ -24231,7 +24460,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8936:20:1", + "src": "9101:20:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -24246,29 +24475,29 @@ "typeString": "uint256" } ], - "id": 1132, + "id": 1137, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8928:7:1", + "src": "9093:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1131, + "id": 1136, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8928:7:1", + "src": "9093:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1137, + "id": 1142, "isConstant": false, "isLValue": false, "isPure": true, @@ -24276,7 +24505,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8928:29:1", + "src": "9093:29:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -24293,18 +24522,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1142, + "id": 1147, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "8975:3:1", + "src": "9140:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1143, + "id": 1148, "isConstant": false, "isLValue": false, "isPure": false, @@ -24312,7 +24541,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8975:10:1", + "src": "9140:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -24326,29 +24555,29 @@ "typeString": "address payable" } ], - "id": 1141, + "id": 1146, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8967:7:1", + "src": "9132:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { - "id": 1140, + "id": 1145, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8967:7:1", + "src": "9132:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1144, + "id": 1149, "isConstant": false, "isLValue": false, "isPure": false, @@ -24356,7 +24585,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8967:19:1", + "src": "9132:19:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -24371,29 +24600,29 @@ "typeString": "uint256" } ], - "id": 1139, + "id": 1144, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8959:7:1", + "src": "9124:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes32_$", "typeString": "type(bytes32)" }, "typeName": { - "id": 1138, + "id": 1143, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8959:7:1", + "src": "9124:7:1", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, - "id": 1145, + "id": 1150, "isConstant": false, "isLValue": false, "isPure": false, @@ -24401,7 +24630,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8959:28:1", + "src": "9124:28:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", @@ -24410,12 +24639,12 @@ }, { "argumentTypes": null, - "id": 1146, + "id": 1151, "name": "recipient", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, - "src": "8989:9:1", + "referencedDeclaration": 1106, + "src": "9154:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -24425,18 +24654,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1147, + "id": 1152, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -15, - "src": "9000:3:1", + "src": "9165:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1148, + "id": 1153, "isConstant": false, "isLValue": false, "isPure": false, @@ -24444,7 +24673,7 @@ "memberName": "value", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9000:9:1", + "src": "9165:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24452,12 +24681,12 @@ }, { "argumentTypes": null, - "id": 1149, + "id": 1154, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1106, - "src": "9011:5:1", + "referencedDeclaration": 1110, + "src": "9176:5:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -24474,6 +24703,10 @@ "typeIdentifier": "t_uint8", "typeString": "uint8" }, + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -24495,18 +24728,18 @@ "typeString": "uint32" } ], - "id": 1128, + "id": 1132, "name": "LogTokensLocked", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 389, - "src": "8888:15:1", + "referencedDeclaration": 392, + "src": "9049:15:1", "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", - "typeString": "function (uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" + "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$returns$__$", + "typeString": "function (uint8,uint8,uint8,bytes32,bytes32,bytes32,uint256,uint32)" } }, - "id": 1150, + "id": 1155, "isConstant": false, "isLValue": false, "isPure": false, @@ -24514,61 +24747,61 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8888:129:1", + "src": "9049:133:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1151, + "id": 1156, "nodeType": "EmitStatement", - "src": "8883:134:1" + "src": "9044:138:1" } ] }, "documentation": null, "functionSelector": "58d62e46", - "id": 1153, + "id": 1158, "implemented": true, "kind": "function", "modifiers": [ { "arguments": null, - "id": 1109, + "id": 1113, "modifierName": { "argumentTypes": null, - "id": 1108, + "id": 1112, "name": "nonReentrant", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2478, - "src": "8681:12:1", + "referencedDeclaration": 2992, + "src": "8842:12:1", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8681:12:1" + "src": "8842:12:1" } ], "name": "lockETH", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1107, + "id": 1111, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1102, + "id": 1106, "mutability": "mutable", "name": "recipient", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8592:17:1", + "scope": 1158, + "src": "8753:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24576,10 +24809,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 1101, + "id": 1105, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8592:7:1", + "src": "8753:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -24590,13 +24823,13 @@ }, { "constant": false, - "id": 1104, + "id": 1108, "mutability": "mutable", "name": "target_chain", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8619:18:1", + "scope": 1158, + "src": "8780:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24604,10 +24837,10 @@ "typeString": "uint8" }, "typeName": { - "id": 1103, + "id": 1107, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "8619:5:1", + "src": "8780:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -24618,13 +24851,13 @@ }, { "constant": false, - "id": 1106, + "id": 1110, "mutability": "mutable", "name": "nonce", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1153, - "src": "8647:12:1", + "scope": 1158, + "src": "8808:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24632,10 +24865,10 @@ "typeString": "uint32" }, "typeName": { - "id": 1105, + "id": 1109, "name": "uint32", "nodeType": "ElementaryTypeName", - "src": "8647:6:1", + "src": "8808:6:1", "typeDescriptions": { "typeIdentifier": "t_uint32", "typeString": "uint32" @@ -24645,25 +24878,25 @@ "visibility": "internal" } ], - "src": "8582:83:1" + "src": "8743:83:1" }, "returnParameters": { - "id": 1110, + "id": 1114, "nodeType": "ParameterList", "parameters": [], - "src": "8694:0:1" + "src": "8855:0:1" }, - "scope": 1170, - "src": "8566:458:1", + "scope": 1175, + "src": "8727:462:1", "stateMutability": "payable", "virtual": false, "visibility": "public" }, { "body": { - "id": 1160, + "id": 1165, "nodeType": "Block", - "src": "9055:57:1", + "src": "9220:57:1", "statements": [ { "expression": { @@ -24672,14 +24905,14 @@ { "argumentTypes": null, "hexValue": "706c6561736520757365206c6f636b45544820746f207472616e736665722045544820746f20536f6c616e61", - "id": 1157, + "id": 1162, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9063:46:1", + "src": "9228:46:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_414957345d33678f377f3c67303c55f683553546e00bb5a8689e656385e6efb2", @@ -24695,7 +24928,7 @@ "typeString": "literal_string \"please use lockETH to transfer ETH to Solana\"" } ], - "id": 1156, + "id": 1161, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -24703,13 +24936,13 @@ -19 ], "referencedDeclaration": -19, - "src": "9056:6:1", + "src": "9221:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 1158, + "id": 1163, "isConstant": false, "isLValue": false, "isPure": false, @@ -24717,21 +24950,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9056:54:1", + "src": "9221:54:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1159, + "id": 1164, "nodeType": "ExpressionStatement", - "src": "9056:54:1" + "src": "9221:54:1" } ] }, "documentation": null, - "id": 1161, + "id": 1166, "implemented": true, "kind": "fallback", "modifiers": [], @@ -24739,28 +24972,28 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1154, + "id": 1159, "nodeType": "ParameterList", "parameters": [], - "src": "9035:2:1" + "src": "9200:2:1" }, "returnParameters": { - "id": 1155, + "id": 1160, "nodeType": "ParameterList", "parameters": [], - "src": "9055:0:1" + "src": "9220:0:1" }, - "scope": 1170, - "src": "9027:85:1", + "scope": 1175, + "src": "9192:85:1", "stateMutability": "payable", "virtual": false, "visibility": "external" }, { "body": { - "id": 1168, + "id": 1173, "nodeType": "Block", - "src": "9140:57:1", + "src": "9305:57:1", "statements": [ { "expression": { @@ -24769,14 +25002,14 @@ { "argumentTypes": null, "hexValue": "706c6561736520757365206c6f636b45544820746f207472616e736665722045544820746f20536f6c616e61", - "id": 1165, + "id": 1170, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9148:46:1", + "src": "9313:46:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_414957345d33678f377f3c67303c55f683553546e00bb5a8689e656385e6efb2", @@ -24792,7 +25025,7 @@ "typeString": "literal_string \"please use lockETH to transfer ETH to Solana\"" } ], - "id": 1164, + "id": 1169, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ @@ -24800,13 +25033,13 @@ -19 ], "referencedDeclaration": -19, - "src": "9141:6:1", + "src": "9306:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 1166, + "id": 1171, "isConstant": false, "isLValue": false, "isPure": false, @@ -24814,21 +25047,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9141:54:1", + "src": "9306:54:1", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1167, + "id": 1172, "nodeType": "ExpressionStatement", - "src": "9141:54:1" + "src": "9306:54:1" } ] }, "documentation": null, - "id": 1169, + "id": 1174, "implemented": true, "kind": "receive", "modifiers": [], @@ -24836,26 +25069,26 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1162, + "id": 1167, "nodeType": "ParameterList", "parameters": [], - "src": "9120:2:1" + "src": "9285:2:1" }, "returnParameters": { - "id": 1163, + "id": 1168, "nodeType": "ParameterList", "parameters": [], - "src": "9140:0:1" + "src": "9305:0:1" }, - "scope": 1170, - "src": "9113:84:1", + "scope": 1175, + "src": "9278:84:1", "stateMutability": "payable", "virtual": false, "visibility": "external" } ], - "scope": 1182, - "src": "446:8753:1" + "scope": 1187, + "src": "502:8862:1" }, { "abstract": false, @@ -24864,31 +25097,31 @@ "arguments": null, "baseName": { "contractScope": null, - "id": 1171, + "id": 1176, "name": "IERC20", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2022, - "src": "9220:6:1", + "referencedDeclaration": 2536, + "src": "9385:6:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2022", + "typeIdentifier": "t_contract$_IERC20_$2536", "typeString": "contract IERC20" } }, - "id": 1172, + "id": 1177, "nodeType": "InheritanceSpecifier", - "src": "9220:6:1" + "src": "9385:6:1" } ], "contractDependencies": [ - 2022 + 2536 ], "contractKind": "interface", "documentation": null, "fullyImplemented": false, - "id": 1181, + "id": 1186, "linearizedBaseContracts": [ - 1181, - 2022 + 1186, + 2536 ], "name": "WETH", "nodeType": "ContractDefinition", @@ -24897,7 +25130,7 @@ "body": null, "documentation": null, "functionSelector": "d0e30db0", - "id": 1175, + "id": 1180, "implemented": false, "kind": "function", "modifiers": [], @@ -24905,19 +25138,19 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1173, + "id": 1178, "nodeType": "ParameterList", "parameters": [], - "src": "9245:2:1" + "src": "9410:2:1" }, "returnParameters": { - "id": 1174, + "id": 1179, "nodeType": "ParameterList", "parameters": [], - "src": "9264:0:1" + "src": "9429:0:1" }, - "scope": 1181, - "src": "9229:36:1", + "scope": 1186, + "src": "9394:36:1", "stateMutability": "payable", "virtual": false, "visibility": "external" @@ -24926,7 +25159,7 @@ "body": null, "documentation": null, "functionSelector": "2e1a7d4d", - "id": 1180, + "id": 1185, "implemented": false, "kind": "function", "modifiers": [], @@ -24934,18 +25167,18 @@ "nodeType": "FunctionDefinition", "overrides": null, "parameters": { - "id": 1178, + "id": 1183, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1177, + "id": 1182, "mutability": "mutable", "name": "amount", "nodeType": "VariableDeclaration", "overrides": null, - "scope": 1180, - "src": "9285:14:1", + "scope": 1185, + "src": "9450:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24953,10 +25186,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1176, + "id": 1181, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9285:7:1", + "src": "9450:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24966,26 +25199,26 @@ "visibility": "internal" } ], - "src": "9284:16:1" + "src": "9449:16:1" }, "returnParameters": { - "id": 1179, + "id": 1184, "nodeType": "ParameterList", "parameters": [], - "src": "9309:0:1" + "src": "9474:0:1" }, - "scope": 1181, - "src": "9267:43:1", + "scope": 1186, + "src": "9432:43:1", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" } ], - "scope": 1182, - "src": "9202:110:1" + "scope": 1187, + "src": "9367:110:1" } ], - "src": "103:9210:1" + "src": "103:9375:1" }, "compiler": { "name": "solc", @@ -24993,7 +25226,7 @@ }, "networks": {}, "schemaVersion": "3.2.3", - "updatedAt": "2020-08-20T18:32:51.829Z", + "updatedAt": "2020-08-28T09:22:10.553Z", "devdoc": { "kind": "dev", "methods": {}, @@ -25004,4 +25237,4 @@ "methods": {}, "version": 1 } -} +} \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index 2f3f3319..bd9f028c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2006,6 +2006,14 @@ "@types/node": "*" } }, + "@types/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==", + "requires": { + "base-x": "^3.0.6" + } + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", diff --git a/web/package.json b/web/package.json index b13889fa..b3946ba7 100644 --- a/web/package.json +++ b/web/package.json @@ -14,6 +14,7 @@ "@types/react": "^16.9.0", "@types/react-dom": "^16.9.0", "@types/react-router-dom": "^5.1.5", + "@types/bs58": "^4.0.1", "antd": "^4.4.1", "buffer": "^5.6.0", "buffer-layout": "^1.2.0", @@ -23,7 +24,8 @@ "react-router-dom": "^5.2.0", "react-scripts": "3.4.1", "typescript": "~3.7.2", - "web3": "^1.2.9" + "web3": "^1.2.9", + "bs58": "^4.0.1" }, "devDependencies": { "npm": "^6.14.6", diff --git a/web/src/components/SplBalances.tsx b/web/src/components/SplBalances.tsx index 56c3f282..4f8283c3 100644 --- a/web/src/components/SplBalances.tsx +++ b/web/src/components/SplBalances.tsx @@ -3,6 +3,9 @@ import {BalanceInfo, SolanaTokenContext} from "../providers/SolanaTokenContext"; import {Table} from "antd"; import {CHAIN_ID_SOLANA} from "../utils/bridge"; import {BigNumber} from "ethers/utils"; +import {PublicKey} from "@solana/web3.js"; +import {deriveERC20Address} from "../utils/helpers"; + function SplBalances() { let t = useContext(SolanaTokenContext); @@ -27,7 +30,7 @@ function SplBalances() { title: 'Wrapped', key: 'wrapped', render: (n: any, v: BalanceInfo) => { - return v.assetMeta.chain != CHAIN_ID_SOLANA ? `Wrapped (${v.assetMeta.chain} - 0x${v.assetMeta.address.slice(12).toString("hex")})` : "Native" + return v.assetMeta.chain != CHAIN_ID_SOLANA ? `Wrapped (${v.assetMeta.chain == 2 ? "ETH" : "SOL"} - 0x${v.assetMeta.address.slice(12).toString("hex")})` : `Native (0x${deriveERC20Address(new PublicKey(v.mint))})` } }, ]; diff --git a/web/src/components/TransferProposals.tsx b/web/src/components/TransferProposals.tsx new file mode 100644 index 00000000..ef1cf646 --- /dev/null +++ b/web/src/components/TransferProposals.tsx @@ -0,0 +1,82 @@ +import React, {useContext, useEffect, useState} from "react" +import {SolanaTokenContext} from "../providers/SolanaTokenContext"; +import {Table} from "antd"; +import {Lockup} from "../utils/bridge"; +import {BridgeContext} from "../providers/BridgeContext"; +import {SlotContext} from "../providers/SlotContext"; +import {ethers} from "ethers"; +import {WormholeFactory} from "../contracts/WormholeFactory"; +import {BRIDGE_ADDRESS} from "../config"; +import {keccak256} from "ethers/utils"; +// @ts-ignore +const provider = new ethers.providers.Web3Provider(window.ethereum); + +function TransferProposals() { + let s = useContext(SlotContext); + let t = useContext(SolanaTokenContext); + let tokens = useContext(SolanaTokenContext); + let b = useContext(BridgeContext); + + let [lockups, setLockups] = useState([]) + + useEffect(() => { + if (s % 10 !== 0) return; + + let updateLockups = async () => { + let lockups = []; + for (let account of tokens.balances) { + let accLockups = await b.fetchTransferProposals(account.account) + lockups.push(...accLockups) + } + + let wormhole = WormholeFactory.connect(BRIDGE_ADDRESS, provider); + for (let lockup of lockups) { + console.log(lockup) + + if (lockup.vaaTime === undefined || lockup.vaaTime === 0) continue; + + let signingData = lockup.vaa.slice(lockup.vaa[5] * 66 + 6) + let hash = keccak256(signingData) + + let status = await wormhole.consumedVAAs(hash) + lockup.initialized = status; + } + + setLockups(lockups); + } + updateLockups() + }, [s]) + + const columns = [ + { + title: 'SourceAccount', + key: 'source', + render: (n: any, v: Lockup) => v.sourceAddress.toString() + }, + { + title: 'Mint', + key: 'assetAddress', + render: (n: any, v: Lockup) => v.assetAddress.toString() + }, + { + title: 'Amount', + key: 'amount', + render: (n: any, v: Lockup) => v.amount.toString() + }, + { + title: 'Status', + key: 'status', + render: (n: any, v: Lockup) => { + return (<>Pending {v.initialized}) + } + }, + ]; + + return (<> +

Pending transfers

+ + + ) +} + +export default TransferProposals diff --git a/web/src/config.ts b/web/src/config.ts index 4136c0f3..15c14e43 100644 --- a/web/src/config.ts +++ b/web/src/config.ts @@ -1,6 +1,8 @@ import {PublicKey} from "@solana/web3.js"; const BRIDGE_ADDRESS = "0x5b1869D9A4C187F2EAa108f3062412ecf0526b24"; +const WRAPPED_MASTER = "e78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab" + const SOLANA_BRIDGE_PROGRAM = new PublicKey("Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"); const TOKEN_PROGRAM = new PublicKey("TokenSVp5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"); @@ -9,5 +11,6 @@ const TOKEN_PROGRAM = new PublicKey("TokenSVp5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o export { BRIDGE_ADDRESS, TOKEN_PROGRAM, + WRAPPED_MASTER, SOLANA_BRIDGE_PROGRAM } diff --git a/web/src/contracts/Wormhole.d.ts b/web/src/contracts/Wormhole.d.ts index a4a63131..8e613205 100644 --- a/web/src/contracts/Wormhole.d.ts +++ b/web/src/contracts/Wormhole.d.ts @@ -12,6 +12,10 @@ import { interface WormholeInterface extends Interface { functions: { + consumedVAAs: TypedFunctionDescription<{ encode([]: [Arrayish]): string }>; + + guardian_set_expirity: TypedFunctionDescription<{ encode([]: []): string }>; + guardian_set_index: TypedFunctionDescription<{ encode([]: []): string }>; guardian_sets: TypedFunctionDescription<{ @@ -20,8 +24,6 @@ interface WormholeInterface extends Interface { isWrappedAsset: TypedFunctionDescription<{ encode([]: [string]): string }>; - vaa_expiry: TypedFunctionDescription<{ encode([]: []): string }>; - wrappedAssetMaster: TypedFunctionDescription<{ encode([]: []): string }>; wrappedAssets: TypedFunctionDescription<{ encode([]: [Arrayish]): string }>; @@ -63,12 +65,14 @@ interface WormholeInterface extends Interface { encodeTopics([ target_chain, token_chain, + token_decimals, token, sender, recipient, amount, nonce ]: [ + null, null, null, Arrayish | null, @@ -95,6 +99,22 @@ export class Wormhole extends Contract { interface: WormholeInterface; functions: { + consumedVAAs( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + "consumedVAAs(bytes32)"( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + guardian_set_expirity(overrides?: TransactionOverrides): Promise; + + "guardian_set_expirity()"( + overrides?: TransactionOverrides + ): Promise; + guardian_set_index(overrides?: TransactionOverrides): Promise; "guardian_set_index()"(overrides?: TransactionOverrides): Promise; @@ -119,10 +139,6 @@ export class Wormhole extends Contract { overrides?: TransactionOverrides ): Promise; - vaa_expiry(overrides?: TransactionOverrides): Promise; - - "vaa_expiry()"(overrides?: TransactionOverrides): Promise; - wrappedAssetMaster(overrides?: TransactionOverrides): Promise; "wrappedAssetMaster()"(overrides?: TransactionOverrides): Promise; @@ -200,6 +216,20 @@ export class Wormhole extends Contract { ): Promise; }; + consumedVAAs( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + "consumedVAAs(bytes32)"( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + guardian_set_expirity(overrides?: TransactionOverrides): Promise; + + "guardian_set_expirity()"(overrides?: TransactionOverrides): Promise; + guardian_set_index(overrides?: TransactionOverrides): Promise; "guardian_set_index()"(overrides?: TransactionOverrides): Promise; @@ -224,10 +254,6 @@ export class Wormhole extends Contract { overrides?: TransactionOverrides ): Promise; - vaa_expiry(overrides?: TransactionOverrides): Promise; - - "vaa_expiry()"(overrides?: TransactionOverrides): Promise; - wrappedAssetMaster(overrides?: TransactionOverrides): Promise; "wrappedAssetMaster()"(overrides?: TransactionOverrides): Promise; @@ -313,6 +339,7 @@ export class Wormhole extends Contract { LogTokensLocked( target_chain: null, token_chain: null, + token_decimals: null, token: Arrayish | null, sender: Arrayish | null, recipient: null, @@ -322,6 +349,22 @@ export class Wormhole extends Contract { }; estimate: { + consumedVAAs( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + "consumedVAAs(bytes32)"( + arg0: Arrayish, + overrides?: TransactionOverrides + ): Promise; + + guardian_set_expirity(overrides?: TransactionOverrides): Promise; + + "guardian_set_expirity()"( + overrides?: TransactionOverrides + ): Promise; + guardian_set_index(overrides?: TransactionOverrides): Promise; "guardian_set_index()"( @@ -348,10 +391,6 @@ export class Wormhole extends Contract { overrides?: TransactionOverrides ): Promise; - vaa_expiry(overrides?: TransactionOverrides): Promise; - - "vaa_expiry()"(overrides?: TransactionOverrides): Promise; - wrappedAssetMaster(overrides?: TransactionOverrides): Promise; "wrappedAssetMaster()"( diff --git a/web/src/contracts/WormholeFactory.ts b/web/src/contracts/WormholeFactory.ts index e46f201a..b4d5fad6 100644 --- a/web/src/contracts/WormholeFactory.ts +++ b/web/src/contracts/WormholeFactory.ts @@ -17,26 +17,26 @@ export class WormholeFactory extends ContractFactory { deploy( initial_guardian_set: { keys: string[]; expiration_time: BigNumberish }, wrapped_asset_master: string, - _vaa_expiry: BigNumberish, + _guardian_set_expirity: BigNumberish, overrides?: TransactionOverrides ): Promise { return super.deploy( initial_guardian_set, wrapped_asset_master, - _vaa_expiry, + _guardian_set_expirity, overrides ) as Promise; } getDeployTransaction( initial_guardian_set: { keys: string[]; expiration_time: BigNumberish }, wrapped_asset_master: string, - _vaa_expiry: BigNumberish, + _guardian_set_expirity: BigNumberish, overrides?: TransactionOverrides ): UnsignedTransaction { return super.getDeployTransaction( initial_guardian_set, wrapped_asset_master, - _vaa_expiry, + _guardian_set_expirity, overrides ); } @@ -81,7 +81,7 @@ const _abi = [ }, { internalType: "uint32", - name: "_vaa_expiry", + name: "_guardian_set_expirity", type: "uint32" } ], @@ -122,6 +122,12 @@ const _abi = [ name: "token_chain", type: "uint8" }, + { + indexed: false, + internalType: "uint8", + name: "token_decimals", + type: "uint8" + }, { indexed: true, internalType: "bytes32", @@ -160,6 +166,38 @@ const _abi = [ stateMutability: "payable", type: "fallback" }, + { + inputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + name: "consumedVAAs", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "guardian_set_expirity", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [], name: "guardian_set_index", @@ -211,19 +249,6 @@ const _abi = [ stateMutability: "view", type: "function" }, - { - inputs: [], - name: "vaa_expiry", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32" - } - ], - stateMutability: "view", - type: "function" - }, { inputs: [], name: "wrappedAssetMaster", @@ -363,4 +388,4 @@ const _abi = [ ]; const _bytecode = - "0x60806040526002600160146101000a81548160ff021916908360ff1602179055503480156200002d57600080fd5b506040516200370b3803806200370b83398181016040528101906200005391906200033e565b600160008190555082600260008063ffffffff1681526020019081526020016000206000820151816000019080519060200190620000939291906200014b565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055509050506000600360006101000a81548163ffffffff021916908363ffffffff16021790555080600360046101000a81548163ffffffff021916908363ffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200047c565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200016c565b5b509050620001d69190620001da565b5090565b5b808211156200021357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620001db565b5090565b600081519050620002288162000448565b92915050565b600082601f8301126200024057600080fd5b8151620002576200025182620003db565b620003ad565b915081818352602084019350602081019050838560208402820111156200027d57600080fd5b60005b83811015620002b1578162000296888262000217565b84526020840193506020830192505060018101905062000280565b5050505092915050565b600060408284031215620002ce57600080fd5b620002da6040620003ad565b9050600082015167ffffffffffffffff811115620002f757600080fd5b62000305848285016200022e565b60008301525060206200031b8482850162000327565b60208301525092915050565b600081519050620003388162000462565b92915050565b6000806000606084860312156200035457600080fd5b600084015167ffffffffffffffff8111156200036f57600080fd5b6200037d86828701620002bb565b9350506020620003908682870162000217565b9250506040620003a38682870162000327565b9150509250925092565b6000604051905081810181811067ffffffffffffffff82111715620003d157600080fd5b8060405250919050565b600067ffffffffffffffff821115620003f357600080fd5b602082029050602081019050919050565b6000620004118262000418565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b620004538162000404565b81146200045f57600080fd5b50565b6200046d8162000438565b81146200047957600080fd5b50565b61327f806200048c6000396000f3fe6080604052600436106100955760003560e01c80637f04d9e6116100595780637f04d9e6146101f8578063822d82b31461022357806399da1d3c1461024e578063b6694c2a14610279578063f951975a146102b6576100d5565b806313cca1a9146101105780631a2be4da146101395780633bc0aee61461017657806342b0aefa1461019f57806358d62e46146101dc576100d5565b366100d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100cc90612da0565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010790612da0565b60405180910390fd5b34801561011c57600080fd5b5061013760048036038101906101329190612371565b6102f3565b005b34801561014557600080fd5b50610160600480360381019061015b9190612348565b610745565b60405161016d9190612cde565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906124b2565b610765565b005b3480156101ab57600080fd5b506101c660048036038101906101c19190612520565b611091565b6040516101d39190612f82565b60405180910390f35b6101f660048036038101906101f19190612463565b6110bf565b005b34801561020457600080fd5b5061020d611269565b60405161021a9190612f82565b60405180910390f35b34801561022f57600080fd5b5061023861127f565b6040516102459190612f82565b60405180910390f35b34801561025a57600080fd5b50610263611295565b6040516102709190612c1f565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612411565b6112bb565b6040516102ad9190612c1f565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612520565b6112ee565b6040516102ea9190612f60565b60405180910390f35b60026000541415610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090612f40565b60405180910390fd5b60026000819055506000841415610385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037c90612e80565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561055f578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610428929190612c55565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104a057600080fd5b505afa1580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190612549565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052057600080fd5b505afa158015610534573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610558919061243a565b90506106da565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161059a9190612c3a565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea91906124f7565b90506106193330898b73ffffffffffffffffffffffffffffffffffffffff166113db909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106549190612c3a565b60206040518083038186803b15801561066c57600080fd5b505afa158015610680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a491906124f7565b90506106b9828261146490919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e24208685898b8960405161072c959493929190612fef565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b600260005414156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290612f40565b60405180910390fd5b6002600081905550600061080d600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b905060018160ff1614610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e00565b60405180910390fd5b60006108af600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b9050600061090b600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b60ff169050600081604202600601905060006109748288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061150c90919063ffffffff16565b905042600360049054906101000a900463ffffffff16820163ffffffff16116109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990612e20565b60405180910390fd5b6000610a3283848a8a9050038a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390612d80565b60405180910390fd5b610aa461215c565b600260008763ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b5357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b09575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610ba6575042816020015163ffffffff16115b610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90612ec0565b60405180910390fd5b846001600460038460000151510281610bfa57fe5b04011115610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612e60565b60405180910390fd5b60005b85811015610eb9576000610ca7604283026006018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506000610d08604284026007018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610d69604285026027018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061162c90919063ffffffff16565b90506000610dca604286026047018f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b9050601b8101905085600001518460ff1681518110610de557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e269493929190612cf9565b6020604051602081039080840390855afa158015610e48573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612e40565b60405180910390fd5b505050508080600101915050610c40565b506000610f16600486018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114ae90919063ffffffff16565b90506060610f7e60058701600588018d8d9050038d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061156a9092919063ffffffff16565b905060018260ff161415610ffa57600360009054906101000a900463ffffffff1663ffffffff168863ffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612dc0565b60405180910390fd5b610ff58161168a565b611050565b60108260ff1614156110145761100f81611908565b61104f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690612d60565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b60026000541415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90612f40565b60405180910390fd5b60026000819055506000341415611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612e80565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f5742f26a345471409566883d5cac5a7d295eee7092e5be3a7d6c60bc2a3e242084600160149054906101000a900460ff16873487604051611254959493929190612fef565b60405180910390a36001600081905550505050565b600360049054906101000a900463ffffffff1681565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f661215c565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113a557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161135b575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b61145e846323b872dd60e01b8585856040516024016113fc93929190612c7e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b50505050565b60006114a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c85565b905092915050565b600060018201835110156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90612de0565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90612de0565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990612de0565b60405180910390fd5b60608215600081146115cf57604051915060208201604052611620565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561160d57805183526020830192506020810190506115f0565b50868552601f19601f8301166040525050505b50809150509392505050565b60006020820183511015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b60006116a060008361150c90919063ffffffff16565b905060006116b86004846114ae90919063ffffffff16565b905060608160ff1667ffffffffffffffff811180156116d657600080fd5b506040519080825280602002602001820160405280156117055781602001602082028036833780820191505090505b50905060005b8260ff168110156117885760006117316014830260050187611ce090919063ffffffff16565b90508083838151811061174057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061170b565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117c961215c565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020600082015181600001908051906020019061183592919061217c565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff166040516118f8929190612f9d565b60405180910390a1505050505050565b600061191e6004836114ae90919063ffffffff16565b905060006119366005846114ae90919063ffffffff16565b9050600061194e603285611ce090919063ffffffff16565b905060006119666046866114ae90919063ffffffff16565b9050600061197e606787611d4d90919063ffffffff16565b90508360ff168560ff1614156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090612f20565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790612ea0565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611b71576000611a5260478861162c90919063ffffffff16565b905060008382604051602001611a69929190612bf3565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afc57611af9828685611dab565b90505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b37929190612cb5565b600060405180830381600087803b158015611b5157600080fd5b505af1158015611b65573d6000803e3d6000fd5b50505050505050611bb6565b6000611b87605388611ce090919063ffffffff16565b9050611bb484838373ffffffffffffffffffffffffffffffffffffffff16611f509092919063ffffffff16565b505b505050505050565b6060611c20826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611fd69092919063ffffffff16565b9050600081511115611c805780806020019051810190611c4091906123e8565b611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612f00565b60405180910390fd5b5b505050565b6000838311158290611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc49190612d3e565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090612de0565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90612de0565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250508173ffffffffffffffffffffffffffffffffffffffff166302a0958585856040518363ffffffff1660e01b8152600401611e6c929190612fc6565b600060405180830381600087803b158015611e8657600080fd5b505af1158015611e9a573d6000803e3d6000fd5b50505050816005600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550509392505050565b611fd18363a9059cbb60e01b8484604051602401611f6f929190612cb5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611bbe565b505050565b6060611fe58484600085611fee565b90509392505050565b6060611ff985612111565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90612ee0565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120629190612bdc565b60006040518083038185875af1925050503d806000811461209f576040519150601f19603f3d011682016040523d82523d6000602084013e6120a4565b606091505b509150915081156120b9578092505050612109565b6000815111156120cc5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121009190612d3e565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561215357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b8280548282559060005260206000209081019282156121f5579160200282015b828111156121f45782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061219c565b5b5090506122029190612206565b5090565b5b8082111561223d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612207565b5090565b600081359050612250816131bf565b92915050565b600081519050612265816131d6565b92915050565b60008135905061227a816131ed565b92915050565b60008151905061228f816131ed565b92915050565b60008083601f8401126122a757600080fd5b8235905067ffffffffffffffff8111156122c057600080fd5b6020830191508360018202830111156122d857600080fd5b9250929050565b6000813590506122ee81613204565b92915050565b60008151905061230381613204565b92915050565b6000813590506123188161321b565b92915050565b60008135905061232d81613232565b92915050565b60008151905061234281613232565b92915050565b60006020828403121561235a57600080fd5b600061236884828501612241565b91505092915050565b600080600080600060a0868803121561238957600080fd5b600061239788828901612241565b95505060206123a8888289016122df565b94505060406123b98882890161226b565b93505060606123ca8882890161231e565b92505060806123db88828901612309565b9150509295509295909350565b6000602082840312156123fa57600080fd5b600061240884828501612256565b91505092915050565b60006020828403121561242357600080fd5b60006124318482850161226b565b91505092915050565b60006020828403121561244c57600080fd5b600061245a84828501612280565b91505092915050565b60008060006060848603121561247857600080fd5b60006124868682870161226b565b93505060206124978682870161231e565b92505060406124a886828701612309565b9150509250925092565b600080602083850312156124c557600080fd5b600083013567ffffffffffffffff8111156124df57600080fd5b6124eb85828601612295565b92509250509250929050565b60006020828403121561250957600080fd5b6000612517848285016122f4565b91505092915050565b60006020828403121561253257600080fd5b600061254084828501612309565b91505092915050565b60006020828403121561255b57600080fd5b600061256984828501612333565b91505092915050565b600061257e8383612599565b60208301905092915050565b6125938161311c565b82525050565b6125a2816130ad565b82525050565b6125b1816130ad565b82525050565b60006125c282613052565b6125cc8185613080565b93506125d783613042565b8060005b838110156126085781516125ef8882612572565b97506125fa83613073565b9250506001810190506125db565b5085935050505092915050565b61261e816130bf565b82525050565b61262d816130cb565b82525050565b61264461263f826130cb565b613185565b82525050565b60006126558261305d565b61265f8185613091565b935061266f818560208601613152565b80840191505092915050565b600061268682613068565b612690818561309c565b93506126a0818560208601613152565b6126a9816131a1565b840191505092915050565b60006126c160128361309c565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b600061270160188361309c565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b6000612741602c8361309c565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b60006127a760398361309c565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061280d60128361309c565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b600061284d60188361309c565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b600061288d600f8361309c565b91507f56414120686173206578706972656400000000000000000000000000000000006000830152602082019050919050565b60006128cd60158361309c565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061290d60098361309c565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061294d60148361309c565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b600061298d60198361309c565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129cd60188361309c565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a0d601d8361309c565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a4d602a8361309c565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ab360268361309c565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b19601f8361309c565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b6982826125b7565b9150506020830151612b7e6020860182612b98565b508091505092915050565b612b92816130f5565b82525050565b612ba1816130ff565b82525050565b612bb0816130ff565b82525050565b612bbf8161310f565b82525050565b612bd6612bd18261310f565b61318f565b82525050565b6000612be8828461264a565b915081905092915050565b6000612bff8285612bc5565b600182019150612c0f8284612633565b6020820191508190509392505050565b6000602082019050612c3460008301846125a8565b92915050565b6000602082019050612c4f600083018461258a565b92915050565b6000604082019050612c6a600083018561258a565b612c776020830184612b89565b9392505050565b6000606082019050612c9360008301866125a8565b612ca060208301856125a8565b612cad6040830184612b89565b949350505050565b6000604082019050612cca60008301856125a8565b612cd76020830184612b89565b9392505050565b6000602082019050612cf36000830184612615565b92915050565b6000608082019050612d0e6000830187612624565b612d1b6020830186612bb6565b612d286040830185612624565b612d356060830184612624565b95945050505050565b60006020820190508181036000830152612d58818461267b565b905092915050565b60006020820190508181036000830152612d79816126b4565b9050919050565b60006020820190508181036000830152612d99816126f4565b9050919050565b60006020820190508181036000830152612db981612734565b9050919050565b60006020820190508181036000830152612dd98161279a565b9050919050565b60006020820190508181036000830152612df981612800565b9050919050565b60006020820190508181036000830152612e1981612840565b9050919050565b60006020820190508181036000830152612e3981612880565b9050919050565b60006020820190508181036000830152612e59816128c0565b9050919050565b60006020820190508181036000830152612e7981612900565b9050919050565b60006020820190508181036000830152612e9981612940565b9050919050565b60006020820190508181036000830152612eb981612980565b9050919050565b60006020820190508181036000830152612ed9816129c0565b9050919050565b60006020820190508181036000830152612ef981612a00565b9050919050565b60006020820190508181036000830152612f1981612a40565b9050919050565b60006020820190508181036000830152612f3981612aa6565b9050919050565b60006020820190508181036000830152612f5981612b0c565b9050919050565b60006020820190508181036000830152612f7a8184612b4c565b905092915050565b6000602082019050612f976000830184612ba7565b92915050565b6000604082019050612fb26000830185612ba7565b612fbf6020830184612ba7565b9392505050565b6000604082019050612fdb6000830185612bb6565b612fe86020830184612624565b9392505050565b600060a0820190506130046000830188612bb6565b6130116020830187612bb6565b61301e6040830186612624565b61302b6060830185612b89565b6130386080830184612ba7565b9695505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006130b8826130d5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131278261312e565b9050919050565b600061313982613140565b9050919050565b600061314b826130d5565b9050919050565b60005b83811015613170578082015181840152602081019050613155565b8381111561317f576000848401525b50505050565b6000819050919050565b600061319a826131b2565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b6131c8816130ad565b81146131d357600080fd5b50565b6131df816130bf565b81146131ea57600080fd5b50565b6131f6816130cb565b811461320157600080fd5b50565b61320d816130f5565b811461321857600080fd5b50565b613224816130ff565b811461322f57600080fd5b50565b61323b8161310f565b811461324657600080fd5b5056fea2646970667358221220093e64f2de68a8ba56b15335745c5182b42d2cffc846382a42044fbb6a6793ec64736f6c634300060c0033"; + "0x60806040526002600160146101000a81548160ff021916908360ff1602179055503480156200002d57600080fd5b50604051620037993803806200379983398181016040528101906200005391906200033e565b600160008190555082600260008063ffffffff1681526020019081526020016000206000820151816000019080519060200190620000939291906200014b565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055509050506000600360006101000a81548163ffffffff021916908363ffffffff16021790555080600360046101000a81548163ffffffff021916908363ffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200047c565b828054828255906000526020600020908101928215620001c7579160200282015b82811115620001c65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200016c565b5b509050620001d69190620001da565b5090565b5b808211156200021357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620001db565b5090565b600081519050620002288162000448565b92915050565b600082601f8301126200024057600080fd5b8151620002576200025182620003db565b620003ad565b915081818352602084019350602081019050838560208402820111156200027d57600080fd5b60005b83811015620002b1578162000296888262000217565b84526020840193506020830192505060018101905062000280565b5050505092915050565b600060408284031215620002ce57600080fd5b620002da6040620003ad565b9050600082015167ffffffffffffffff811115620002f757600080fd5b62000305848285016200022e565b60008301525060206200031b8482850162000327565b60208301525092915050565b600081519050620003388162000462565b92915050565b6000806000606084860312156200035457600080fd5b600084015167ffffffffffffffff8111156200036f57600080fd5b6200037d86828701620002bb565b9350506020620003908682870162000217565b9250506040620003a38682870162000327565b9150509250925092565b6000604051905081810181811067ffffffffffffffff82111715620003d157600080fd5b8060405250919050565b600067ffffffffffffffff821115620003f357600080fd5b602082029050602081019050919050565b6000620004118262000418565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b620004538162000404565b81146200045f57600080fd5b50565b6200046d8162000438565b81146200047957600080fd5b50565b61330d806200048c6000396000f3fe6080604052600436106100a05760003560e01c806358d62e461161006457806358d62e4614610212578063822d82b31461022e57806399da1d3c14610259578063a31fe40914610284578063b6694c2a146102c1578063f951975a146102fe576100e0565b806313cca1a91461011b5780631a2be4da146101445780633bc0aee61461018157806342b0aefa146101aa5780634db47840146101e7576100e0565b366100e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d790612dbf565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011290612dbf565b60405180910390fd5b34801561012757600080fd5b50610142600480360381019061013d91906123c1565b61033b565b005b34801561015057600080fd5b5061016b60048036038101906101669190612398565b61080c565b6040516101789190612cfd565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612502565b61082c565b005b3480156101b657600080fd5b506101d160048036038101906101cc9190612570565b6110a0565b6040516101de9190612f81565b60405180910390f35b3480156101f357600080fd5b506101fc6110ce565b6040516102099190612f81565b60405180910390f35b61022c600480360381019061022791906124b3565b6110e4565b005b34801561023a57600080fd5b50610243611291565b6040516102509190612f81565b60405180910390f35b34801561026557600080fd5b5061026e6112a7565b60405161027b9190612c3e565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612461565b6112cd565b6040516102b89190612cfd565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612461565b6112ed565b6040516102f59190612c3e565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612570565b611320565b6040516103329190612f5f565b60405180910390f35b60026000541415610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037890612f3f565b60405180910390fd5b600260008190555060008414156103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612e7f565b60405180910390fd5b6000600160149054906101000a900460ff1690506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105a7578673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33886040518363ffffffff1660e01b8152600401610470929190612c74565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663026b05396040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e857600080fd5b505afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105209190612599565b91508673ffffffffffffffffffffffffffffffffffffffff16631ba46cfd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056857600080fd5b505afa15801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a0919061248a565b9050610722565b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105e29190612c59565b60206040518083038186803b1580156105fa57600080fd5b505afa15801561060e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106329190612547565b90506106613330898b73ffffffffffffffffffffffffffffffffffffffff1661140d909392919063ffffffff16565b60008873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161069c9190612c59565b60206040518083038186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190612547565b9050610701828261149690919063ffffffff16565b97508873ffffffffffffffffffffffffffffffffffffffff1660001b925050505b3373ffffffffffffffffffffffffffffffffffffffff1660001b817f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab886858b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a657600080fd5b505afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612599565b8a8c8a6040516107f39695949392919061305d565b60405180910390a3505060016000819055505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60026000541415610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990612f3f565b60405180910390fd5b600260008190555060006108d4600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b905060018160ff161461091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390612e1f565b60405180910390fd5b6000610976600185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061153e90919063ffffffff16565b905060006109d2600586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b60ff16905060008160420260060190506000610a428283898990500389898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b8051906020012090506004600082815260200190815260200160002060009054906101000a900460ff1615610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390612d9f565b60405180910390fd5b610ab46121ac565b600260008663ffffffff1663ffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610b6357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610b19575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff161480610bb6575042816020015163ffffffff16115b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612ebf565b60405180910390fd5b8360016003600484600001515181610c0957fe5b0402011115610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490612e5f565b60405180910390fd5b60005b84811015610ec9576000610cb7604283026006018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506000610d18604284026007018c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610d79604285026027018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061165e90919063ffffffff16565b90506000610dda604286026047018e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b9050601b8101905085600001518460ff1681518110610df557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660018883868660405160008152602001604052604051610e369493929190612d18565b6020604051602081039080840390855afa158015610e58573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612e3f565b60405180910390fd5b505050508080600101915050610c50565b506000610f26600485018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114e090919063ffffffff16565b90506060610f8e60058601600587018c8c9050038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061159c9092919063ffffffff16565b905060018260ff16141561100a57600360009054906101000a900463ffffffff1663ffffffff168763ffffffff1614610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390612ddf565b60405180910390fd5b611005816116bc565b611060565b60108260ff1614156110245761101f8161193a565b61105f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690612d7f565b60405180910390fd5b5b60016004600086815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505060016000819055505050565b60026020528060005260406000206000915090508060010160009054906101000a900463ffffffff16905081565b600360049054906101000a900463ffffffff1681565b6002600054141561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190612f3f565b60405180910390fd5b60026000819055506000341415611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90612e7f565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050503373ffffffffffffffffffffffffffffffffffffffff1660001b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660001b7f6bbd554ad75919f71fd91bf917ca6e4f41c10f03ab25751596a22253bb39aab884600160149054906101000a900460ff16601288348860405161127c96959493929190612ffc565b60405180910390a36001600081905550505050565b600360009054906101000a900463ffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113286121ac565b600260008363ffffffff1663ffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113d757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161138d575b505050505081526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050919050565b611490846323b872dd60e01b85858560405160240161142e93929190612c9d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b50505050565b60006114d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd1565b905092915050565b60006001820183511015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090612dff565b60405180910390fd5b60008260018501015190508091505092915050565b60006004820183511015611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90612dff565b60405180910390fd5b60008260048501015190508091505092915050565b6060818301845110156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612dff565b60405180910390fd5b606082156000811461160157604051915060208201604052611652565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561163f5780518352602083019250602081019050611622565b50868552601f19601f8301166040525050505b50809150509392505050565b600060208201835110156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90612dff565b60405180910390fd5b60008260208501015190508091505092915050565b60006116d260008361153e90919063ffffffff16565b905060006116ea6004846114e090919063ffffffff16565b905060608160ff1667ffffffffffffffff8111801561170857600080fd5b506040519080825280602002602001820160405280156117375781602001602082028036833780820191505090505b50905060005b8260ff168110156117ba5760006117636014830260050187611d2c90919063ffffffff16565b90508083838151811061177257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050808060010191505061173d565b506000600360009054906101000a900463ffffffff16905083600360006101000a81548163ffffffff021916908363ffffffff1602179055506117fb6121ac565b6040518060400160405280848152602001600063ffffffff1681525090508060026000600360009054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000190805190602001906118679291906121cc565b5060208201518160010160006101000a81548163ffffffff021916908363ffffffff160217905550905050600360049054906101000a900463ffffffff164201600260008463ffffffff1663ffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055507fdfb80683934199683861bf00b64ecdf0984bbaf661bf27983dba382e99297a6282600360009054906101000a900463ffffffff1660405161192a929190612f9c565b60405180910390a1505050505050565b60006119506004836114e090919063ffffffff16565b905060006119686005846114e090919063ffffffff16565b90506000611980603285611d2c90919063ffffffff16565b905060006119986046866114e090919063ffffffff16565b905060006119b0606887611d9990919063ffffffff16565b90508360ff168560ff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612f1f565b60405180910390fd5b600160149054906101000a900460ff1660ff168460ff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990612e9f565b60405180910390fd5b600160149054906101000a900460ff1660ff168260ff1614611bbd576000611a8460478861165e90919063ffffffff16565b905060008382604051602001611a9b929190612c12565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b48576000611b3660678b6114e090919063ffffffff16565b9050611b4483878684611df7565b9150505b8073ffffffffffffffffffffffffffffffffffffffff166340c10f1987866040518363ffffffff1660e01b8152600401611b83929190612cd4565b600060405180830381600087803b158015611b9d57600080fd5b505af1158015611bb1573d6000803e3d6000fd5b50505050505050611c02565b6000611bd3605388611d2c90919063ffffffff16565b9050611c0084838373ffffffffffffffffffffffffffffffffffffffff16611fa09092919063ffffffff16565b505b505050505050565b6060611c6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120269092919063ffffffff16565b9050600081511115611ccc5780806020019051810190611c8c9190612438565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc290612eff565b60405180910390fd5b5b505050565b6000838311158290611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109190612d5d565b60405180910390fd5b5060008385039050809150509392505050565b60006014820183511015611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90612dff565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006020820183511015611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990612dff565b60405180910390fd5b60008260208501015190508091505092915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152866037826000f59250508173ffffffffffffffffffffffffffffffffffffffff1663a7a2d3fb8686866040518463ffffffff1660e01b8152600401611ebb93929190612fc5565b600060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b50505050816005600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050949350505050565b6120218363a9059cbb60e01b8484604051602401611fbf929190612cd4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c0a565b505050565b6060612035848460008561203e565b90509392505050565b606061204985612161565b612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90612edf565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516120b29190612bfb565b60006040518083038185875af1925050503d80600081146120ef576040519150601f19603f3d011682016040523d82523d6000602084013e6120f4565b606091505b50915091508115612109578092505050612159565b60008151111561211c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121509190612d5d565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156121a357506000801b8214155b92505050919050565b604051806040016040528060608152602001600063ffffffff1681525090565b828054828255906000526020600020908101928215612245579160200282015b828111156122445782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906121ec565b5b5090506122529190612256565b5090565b5b8082111561228d57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612257565b5090565b6000813590506122a08161324d565b92915050565b6000815190506122b581613264565b92915050565b6000813590506122ca8161327b565b92915050565b6000815190506122df8161327b565b92915050565b60008083601f8401126122f757600080fd5b8235905067ffffffffffffffff81111561231057600080fd5b60208301915083600182028301111561232857600080fd5b9250929050565b60008135905061233e81613292565b92915050565b60008151905061235381613292565b92915050565b600081359050612368816132a9565b92915050565b60008135905061237d816132c0565b92915050565b600081519050612392816132c0565b92915050565b6000602082840312156123aa57600080fd5b60006123b884828501612291565b91505092915050565b600080600080600060a086880312156123d957600080fd5b60006123e788828901612291565b95505060206123f88882890161232f565b9450506040612409888289016122bb565b935050606061241a8882890161236e565b925050608061242b88828901612359565b9150509295509295909350565b60006020828403121561244a57600080fd5b6000612458848285016122a6565b91505092915050565b60006020828403121561247357600080fd5b6000612481848285016122bb565b91505092915050565b60006020828403121561249c57600080fd5b60006124aa848285016122d0565b91505092915050565b6000806000606084860312156124c857600080fd5b60006124d6868287016122bb565b93505060206124e78682870161236e565b92505060406124f886828701612359565b9150509250925092565b6000806020838503121561251557600080fd5b600083013567ffffffffffffffff81111561252f57600080fd5b61253b858286016122e5565b92509250509250929050565b60006020828403121561255957600080fd5b600061256784828501612344565b91505092915050565b60006020828403121561258257600080fd5b600061259084828501612359565b91505092915050565b6000602082840312156125ab57600080fd5b60006125b984828501612383565b91505092915050565b60006125ce83836125e9565b60208301905092915050565b6125e381613198565b82525050565b6125f281613129565b82525050565b61260181613129565b82525050565b6000612612826130ce565b61261c81856130fc565b9350612627836130be565b8060005b8381101561265857815161263f88826125c2565b975061264a836130ef565b92505060018101905061262b565b5085935050505092915050565b61266e8161313b565b82525050565b61267d81613147565b82525050565b61269461268f82613147565b613213565b82525050565b60006126a5826130d9565b6126af818561310d565b93506126bf8185602086016131e0565b80840191505092915050565b6126d4816131aa565b82525050565b60006126e5826130e4565b6126ef8185613118565b93506126ff8185602086016131e0565b6127088161322f565b840191505092915050565b6000612720601283613118565b91507f696e76616c69642056414120616374696f6e00000000000000000000000000006000830152602082019050919050565b6000612760601883613118565b91507f5641412077617320616c726561647920657865637574656400000000000000006000830152602082019050919050565b60006127a0602c83613118565b91507f706c6561736520757365206c6f636b45544820746f207472616e73666572204560008301527f544820746f20536f6c616e6100000000000000000000000000000000000000006020830152604082019050919050565b6000612806603983613118565b91507f6f6e6c79207468652063757272656e7420677561726469616e2073657420636160008301527f6e206368616e67652074686520677561726469616e20736574000000000000006020830152604082019050919050565b600061286c601283613118565b91507f52656164206f7574206f6620626f756e647300000000000000000000000000006000830152602082019050919050565b60006128ac601883613118565b91507f5641412076657273696f6e20696e636f6d70617469626c6500000000000000006000830152602082019050919050565b60006128ec601583613118565b91507f564141207369676e617475726520696e76616c696400000000000000000000006000830152602082019050919050565b600061292c600983613118565b91507f6e6f2071756f72756d00000000000000000000000000000000000000000000006000830152602082019050919050565b600061296c601483613118565b91507f616d6f756e74206d757374206e6f7420626520300000000000000000000000006000830152602082019050919050565b60006129ac601983613118565b91507f7472616e73666572206d75737420626520696e636f6d696e67000000000000006000830152602082019050919050565b60006129ec601883613118565b91507f677561726469616e2073657420686173206578706972656400000000000000006000830152602082019050919050565b6000612a2c601d83613118565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612a6c602a83613118565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad2602683613118565b91507f73616d6520636861696e207472616e736665727320617265206e6f742073757060008301527f706f7274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b38601f83613118565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006040830160008301518482036000860152612b888282612607565b9150506020830151612b9d6020860182612bb7565b508091505092915050565b612bb181613171565b82525050565b612bc08161317b565b82525050565b612bcf8161317b565b82525050565b612bde8161318b565b82525050565b612bf5612bf08261318b565b61321d565b82525050565b6000612c07828461269a565b915081905092915050565b6000612c1e8285612be4565b600182019150612c2e8284612683565b6020820191508190509392505050565b6000602082019050612c5360008301846125f8565b92915050565b6000602082019050612c6e60008301846125da565b92915050565b6000604082019050612c8960008301856125da565b612c966020830184612ba8565b9392505050565b6000606082019050612cb260008301866125f8565b612cbf60208301856125f8565b612ccc6040830184612ba8565b949350505050565b6000604082019050612ce960008301856125f8565b612cf66020830184612ba8565b9392505050565b6000602082019050612d126000830184612665565b92915050565b6000608082019050612d2d6000830187612674565b612d3a6020830186612bd5565b612d476040830185612674565b612d546060830184612674565b95945050505050565b60006020820190508181036000830152612d7781846126da565b905092915050565b60006020820190508181036000830152612d9881612713565b9050919050565b60006020820190508181036000830152612db881612753565b9050919050565b60006020820190508181036000830152612dd881612793565b9050919050565b60006020820190508181036000830152612df8816127f9565b9050919050565b60006020820190508181036000830152612e188161285f565b9050919050565b60006020820190508181036000830152612e388161289f565b9050919050565b60006020820190508181036000830152612e58816128df565b9050919050565b60006020820190508181036000830152612e788161291f565b9050919050565b60006020820190508181036000830152612e988161295f565b9050919050565b60006020820190508181036000830152612eb88161299f565b9050919050565b60006020820190508181036000830152612ed8816129df565b9050919050565b60006020820190508181036000830152612ef881612a1f565b9050919050565b60006020820190508181036000830152612f1881612a5f565b9050919050565b60006020820190508181036000830152612f3881612ac5565b9050919050565b60006020820190508181036000830152612f5881612b2b565b9050919050565b60006020820190508181036000830152612f798184612b6b565b905092915050565b6000602082019050612f966000830184612bc6565b92915050565b6000604082019050612fb16000830185612bc6565b612fbe6020830184612bc6565b9392505050565b6000606082019050612fda6000830186612bd5565b612fe76020830185612674565b612ff46040830184612bd5565b949350505050565b600060c0820190506130116000830189612bd5565b61301e6020830188612bd5565b61302b60408301876126cb565b6130386060830186612674565b6130456080830185612ba8565b61305260a0830184612bc6565b979650505050505050565b600060c0820190506130726000830189612bd5565b61307f6020830188612bd5565b61308c6040830187612bd5565b6130996060830186612674565b6130a66080830185612ba8565b6130b360a0830184612bc6565b979650505050505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061313482613151565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006131a3826131bc565b9050919050565b60006131b58261318b565b9050919050565b60006131c7826131ce565b9050919050565b60006131d982613151565b9050919050565b60005b838110156131fe5780820151818401526020810190506131e3565b8381111561320d576000848401525b50505050565b6000819050919050565b600061322882613240565b9050919050565b6000601f19601f8301169050919050565b60008160f81b9050919050565b61325681613129565b811461326157600080fd5b50565b61326d8161313b565b811461327857600080fd5b50565b61328481613147565b811461328f57600080fd5b50565b61329b81613171565b81146132a657600080fd5b50565b6132b28161317b565b81146132bd57600080fd5b50565b6132c98161318b565b81146132d457600080fd5b5056fea26469706673582212208f3f419adeb7ca3cd853715b74fc3a8cacdc215c41169446b0565304bd3fa34364736f6c634300060c0033"; diff --git a/web/src/pages/Transfer.tsx b/web/src/pages/Transfer.tsx index c53196fc..b589a4a3 100644 --- a/web/src/pages/Transfer.tsx +++ b/web/src/pages/Transfer.tsx @@ -15,6 +15,7 @@ import {AssetMeta, SolanaBridge} from "../utils/bridge"; import KeyContext from "../providers/KeyContext"; import {FormInstance} from "antd/lib/form"; import SplBalances from "../components/SplBalances"; +import TransferProposals from "../components/TransferProposals"; // @ts-ignore @@ -57,11 +58,6 @@ async function approveAssets(asset: string, async function createWrapped(c: Connection, b: SolanaBridge, key: Account, meta: AssetMeta, mint: PublicKey) { try { let tx = new Transaction(); - let mintAccount = await c.getAccountInfo(mint); - if (!mintAccount) { - let ix = await b.createWrappedAssetInstruction(key.publicKey, meta); - tx.add(ix) - } // @ts-ignore let [ix_account, newSigner] = await b.createWrappedAssetAndAccountInstructions(key.publicKey, mint); @@ -279,6 +275,11 @@ function Transfer() { + + + + + ); } diff --git a/web/src/pages/TransferSolana.tsx b/web/src/pages/TransferSolana.tsx index d92eba36..2ad7a4f3 100644 --- a/web/src/pages/TransferSolana.tsx +++ b/web/src/pages/TransferSolana.tsx @@ -74,7 +74,7 @@ function TransferSolana() { { chain: coinInfo.chainID, address: coinInfo.wrappedAddress - }, 2); + }, Math.random()*100000); let ix = spl.Token.createApproveInstruction(TOKEN_PROGRAM, fromAccount, await bridge.getConfigKey(), k.publicKey, [], transferAmount.toNumber()) let recentHash = await c.getRecentBlockhash(); diff --git a/web/src/providers/KeyContext.ts b/web/src/providers/KeyContext.ts index 451bab45..9636cba0 100644 --- a/web/src/providers/KeyContext.ts +++ b/web/src/providers/KeyContext.ts @@ -3,5 +3,5 @@ import * as solanaWeb3 from '@solana/web3.js'; import {Account} from "@solana/web3.js"; -const KeyContext = React.createContext(new Account([97,215,234,123,197,228,56,3,210,182,139,102,127,246,235,213,211,40,93,149,16,226,130,1,29,196,87,105,185,115,179,53,123,232,195,48,5,229,144,176,217,8,1,27,185,162,160,157,137,210,99,173,135,148,20,232,241,43,238,229,1,61,122,183])); +const KeyContext = React.createContext(new Account([14,173,153,4,176,224,201,111,32,237,183,185,159,247,22,161,89,84,215,209,212,137,10,92,157,49,29,192,101,164,152,70,87,65,8,174,214,157,175,126,98,90,54,24,100,177,247,77,19,112,47,44,165,109,233,102,14,86,109,29,134,145,132,141])); export default KeyContext diff --git a/web/src/providers/SolanaTokenContext.tsx b/web/src/providers/SolanaTokenContext.tsx index 0b9ddc77..0257fe37 100644 --- a/web/src/providers/SolanaTokenContext.tsx +++ b/web/src/providers/SolanaTokenContext.tsx @@ -8,6 +8,7 @@ import {TOKEN_PROGRAM} from "../config"; import {BridgeContext} from "./BridgeContext"; import {message} from "antd"; import {AssetMeta} from "../utils/bridge"; +import {Buffer} from "buffer"; export interface BalanceInfo { mint: string, diff --git a/web/src/utils/bridge.ts b/web/src/utils/bridge.ts index 8cc24371..07e24d13 100644 --- a/web/src/utils/bridge.ts +++ b/web/src/utils/bridge.ts @@ -6,12 +6,26 @@ import assert from "assert"; import * as BufferLayout from 'buffer-layout' import {Token} from "@solana/spl-token"; import {TOKEN_PROGRAM} from "../config"; +import * as bs58 from "bs58"; export interface AssetMeta { chain: number, address: Buffer } +export interface Lockup { + amount: BN, + toChain: number, + sourceAddress: PublicKey, + targetAddress: Uint8Array, + assetAddress: Uint8Array, + assetChain: number, + nonce: number, + vaa: Uint8Array, + vaaTime: number, + initialized: boolean, +} + export const CHAIN_ID_SOLANA = 1; class SolanaBridge { @@ -25,51 +39,6 @@ class SolanaBridge { this.connection = connection; } - async createWrappedAssetInstruction( - payer: PublicKey, - asset: AssetMeta, - ): Promise { - const dataLayout = BufferLayout.struct([ - BufferLayout.u8('instruction'), - BufferLayout.blob(32, 'address'), - BufferLayout.u8('chain'), - ]); - - // @ts-ignore - let configKey = await this.getConfigKey(); - let seeds: Array = [Buffer.from("wrapped"), configKey.toBuffer(), Buffer.from([asset.chain]), - padBuffer(asset.address, 32)]; - // @ts-ignore - let wrappedKey = (await solanaWeb3.PublicKey.findProgramAddress(seeds, this.programID))[0]; - // @ts-ignore - let wrappedMetaKey = (await solanaWeb3.PublicKey.findProgramAddress([Buffer.from("meta"), configKey.toBuffer(), wrappedKey.toBuffer()], this.programID))[0]; - - const data = Buffer.alloc(dataLayout.span); - dataLayout.encode( - { - instruction: 5, // CreateWrapped instruction - address: padBuffer(asset.address, 32), - chain: asset.chain, - }, - data, - ); - - const keys = [ - {pubkey: this.programID, isSigner: false, isWritable: false}, - {pubkey: solanaWeb3.SystemProgram.programId, isSigner: false, isWritable: false}, - {pubkey: this.tokenProgram, isSigner: false, isWritable: false}, - {pubkey: configKey, isSigner: false, isWritable: false}, - {pubkey: payer, isSigner: true, isWritable: true}, - {pubkey: wrappedKey, isSigner: false, isWritable: true}, - {pubkey: wrappedMetaKey, isSigner: false, isWritable: true}, - ]; - return new TransactionInstruction({ - keys, - programId: this.programID, - data, - }); - } - async createLockAssetInstruction( payer: PublicKey, tokenAccount: PublicKey, @@ -86,8 +55,9 @@ class SolanaBridge { BufferLayout.u8('targetChain'), BufferLayout.blob(32, 'assetAddress'), BufferLayout.u8('assetChain'), + BufferLayout.u8('assetDecimals'), BufferLayout.blob(32, 'targetAddress'), - BufferLayout.seq(BufferLayout.u8(), 2), + BufferLayout.seq(BufferLayout.u8(), 1), BufferLayout.u32('nonce'), ]); @@ -111,6 +81,7 @@ class SolanaBridge { targetChain: targetChain, assetAddress: padBuffer(asset.address, 32), assetChain: asset.chain, + assetDecimals: 0, // This is fetched on chain targetAddress: padBuffer(targetAddress, 32), nonce: nonce, }, @@ -172,6 +143,67 @@ class SolanaBridge { } } + // fetchAssetMeta fetches the AssetMeta for an SPL token + async fetchTransferProposals( + tokenAccount: PublicKey, + ): Promise { + let accountRes = await fetch("http://localhost:8899", { + method: "POST", + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + "jsonrpc": "2.0", + "id": 1, + "method": "getProgramAccounts", + "params": [this.programID.toString(), { + "filters": [{"dataSize": 1152}, { + "memcmp": { + "offset": 33, + "bytes": tokenAccount.toString() + } + }] + }] + }), + }) + let raw_accounts = (await accountRes.json())["result"]; + + const dataLayout = BufferLayout.struct([ + uint256('amount'), + BufferLayout.u8('toChain'), + BufferLayout.blob(32, 'sourceAddress'), + BufferLayout.blob(32, 'targetAddress'), + BufferLayout.blob(32, 'assetAddress'), + BufferLayout.u8('assetChain'), + BufferLayout.u8('assetDecimals'), + BufferLayout.u32('nonce'), + BufferLayout.blob(1001, 'vaa'), + BufferLayout.u32('vaaTime'), + BufferLayout.u8('initialized'), + ]); + + let accounts: Lockup[] = []; + for (let acc of raw_accounts) { + acc = acc.account; + let parsedAccount = dataLayout.decode(bs58.decode(acc.data)) + console.log(parsedAccount); + accounts.push({ + amount: new BN(parsedAccount.amount, 2, "le"), + assetAddress: parsedAccount.assetAddress, + assetChain: acc.assetChain, + initialized: acc.initialized == 1, + nonce: acc.nonce, + sourceAddress: new PublicKey(parsedAccount.sourceAddress), + targetAddress: parsedAccount.targetAddress, + toChain: acc.toChain, + vaa: acc.vaa, + vaaTime: acc.vaaTime + }) + } + + return accounts + } + AccountLayout = BufferLayout.struct([publicKey('mint'), publicKey('owner'), uint64('amount'), BufferLayout.u32('option'), publicKey('delegate'), BufferLayout.u8('is_initialized'), BufferLayout.u8('is_native'), BufferLayout.u16('padding'), uint64('delegatedAmount')]); async createWrappedAssetAndAccountInstructions(owner: PublicKey, mint: PublicKey): Promise<[TransactionInstruction[], solanaWeb3.Account]> { @@ -221,6 +253,10 @@ class SolanaBridge { } async getWrappedAssetMint(asset: AssetMeta): Promise { + if (asset.chain === 1) { + return new PublicKey(asset.address) + } + let configKey = await this.getConfigKey(); let seeds: Array = [Buffer.from("wrapped"), configKey.toBuffer(), Buffer.of(asset.chain), padBuffer(asset.address, 32)]; diff --git a/web/src/utils/helpers.ts b/web/src/utils/helpers.ts new file mode 100644 index 00000000..1f6a4c52 --- /dev/null +++ b/web/src/utils/helpers.ts @@ -0,0 +1,12 @@ +import {PublicKey} from "@solana/web3.js"; +import {BRIDGE_ADDRESS, WRAPPED_MASTER} from "../config"; +import {keccak256} from "ethers/utils"; + +// derive the ERC20 address of a Solana SPL asset wrapped on ETH. +export function deriveERC20Address(key: PublicKey) { + let hashData = "0xff" + BRIDGE_ADDRESS.slice(2); + hashData += keccak256(Buffer.concat([new Buffer([1]), key.toBuffer()])).slice(2) // asset_id + hashData += keccak256("0x3d602d80600a3d3981f3363d3d373d3d3d363d73" + WRAPPED_MASTER + "5af43d82803e903d91602b57fd5bf3").slice(2) // Bytecode + + return keccak256(hashData).slice(26) +}