diff --git a/.gitignore b/.gitignore
index de3a847ace5001c560b8164f6cdff8bf52fc441e..fea7df6c2d09559a2bcb6f6942a376a97e2f8f0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,4 @@
 *un~
 .DS_Store
 */**/.DS_Store
-ethereum/ethereum
-ethereal/ethereal
-
+.ethtest
diff --git a/.travis.yml b/.travis.yml
index 32740f91a55dd9da9097ade675299b3b76d0ca8c..d09cbcdb09367b5a828a1cde8fdae817107c620c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,25 @@
-before_install: sudo apt-get install libgmp3-dev
 language: go
 go:
-  - 1.2
+  - 1.3
+before_install:
+  - sudo add-apt-repository ppa:ubuntu-sdk-team/ppa -y
+  - sudo apt-get update -qq
+  - sudo apt-get install -yqq libgmp3-dev qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev libreadline6-dev
+install:
+  - go get code.google.com/p/go.tools/cmd/goimports
+  - go get github.com/golang/lint/golint
+  # - go get code.google.com/p/go.tools/cmd/vet
+  - go get code.google.com/p/go.tools/cmd/cover
+  - go get github.com/mattn/goveralls
+  - ./install_deps.sh
+before_script:
+  - gofmt -l -w .
+  - goimports -l -w .
+  - golint .
+  # - go vet ./...
+  # - go test -race ./...
+script:
+  - ./gocoverage.sh && goveralls -coverprofile=profile.cov -service=travis-ci -repotoken $COVERALLS_TOKEN
+env:
+  - secure: "U2U1AmkU4NJBgKR/uUAebQY87cNL0+1JHjnLOmmXwxYYyj5ralWb1aSuSH3qSXiT93qLBmtaUkuv9fberHVqrbAeVlztVdUsKAq7JMQH+M99iFkC9UiRMqHmtjWJ0ok4COD1sRYixxi21wb/JrMe3M1iL4QJVS61iltjHhVdM64="
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1f37ce892a703f699152031a8003760a8e043949
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,41 @@
+FROM ubuntu:14.04
+
+## Environment setup
+ENV HOME /root
+ENV GOPATH /root/go
+ENV PATH /go/bin:/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+
+RUN mkdir -p /root/go
+ENV DEBIAN_FRONTEND noninteractive
+
+## Install base dependencies
+RUN apt-get update && apt-get upgrade -y
+RUN apt-get install -y git mercurial build-essential software-properties-common pkg-config libgmp3-dev libreadline6-dev libpcre3-dev libpcre++-dev
+
+## Build and install Go
+RUN hg clone -u release https://code.google.com/p/go
+RUN cd go && hg update go1.4
+RUN cd go/src && ./all.bash && go version
+
+## Install GUI dependencies
+RUN add-apt-repository ppa:ubuntu-sdk-team/ppa -y
+RUN apt-get update -y
+RUN apt-get install -y qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev
+
+## Fetch and install serpent-go
+RUN go get -v -d github.com/ethereum/serpent-go
+WORKDIR $GOPATH/src/github.com/ethereum/serpent-go
+RUN git checkout master
+RUN git submodule update --init
+RUN go install -v
+
+# Fetch and install go-ethereum
+RUN go get -v -d github.com/ethereum/go-ethereum/...
+WORKDIR $GOPATH/src/github.com/ethereum/go-ethereum
+RUN git checkout poc8
+RUN ETH_DEPS=$(go list -f '{{.Imports}} {{.TestImports}} {{.XTestImports}}' github.com/ethereum/go-ethereum/... | sed -e 's/\[//g' | sed -e 's/\]//g' | sed -e 's/C //g'); if [ "$ETH_DEPS" ]; then go get $ETH_DEPS; fi
+RUN go install -v ./cmd/ethereum
+
+# Run JSON RPC
+ENTRYPOINT ["ethereum", "-rpc=true", "-rpcport=8080"]
+EXPOSE 8080
diff --git a/LICENSE b/LICENSE
index 78efdaabe9d71de384bda09447903e48f54f685d..30f629158e68dd05be52829afa053bd006265d75 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,16 +1,16 @@
 Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
 
 This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
+modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.
 
 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
+Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this library; if not, write to the Free Software
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 MA 02110-1301  USA
diff --git a/README.md b/README.md
index 8657e3fb60ed5bb814bdc5b988accb2aa0c6c735..564e5c56dde74cc93630a92d34c622bd9a7464d3 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,8 @@
+[](https://waffle.io/ethereum/go-ethereum)
 [](https://waffle.io/ethereum/go-ethereum)
+[](http://waffle.io/ethereum/go-ethereum)
+
 Ethereum
 ========
 
@@ -8,38 +12,64 @@ Status](http://build.ethdev.com/buildstatusimage?builder=Linux%20Go%20develop%20
 
 Ethereum Go Client © 2014 Jeffrey Wilcke.
 
-Current state: Proof of Concept 0.6.7.
+Current state: Proof of Concept 0.7
 
-For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
+Ethereum is currently in its testing phase. 
 
 Build
-=======
+=====
 
-To build Ethereal (GUI):
+To build Mist (GUI):
 
-`go get github.com/ethereum/go-ethereum/ethereal`
+`go get github.com/ethereum/go-ethereum/cmd/mist`
 
 To build the node (CLI):
 
-`go get github.com/ethereum/go-ethereum/ethereum`
+`go get github.com/ethereum/go-ethereum/cmd/ethereum`
 
 For further, detailed, build instruction please see the [Wiki](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum(Go))
 
+Automated (dev) builds
+======================
+
+* [[OS X](http://build.ethdev.com/builds/OSX%20Go%20develop%20branch/latest/app/)]
+* [Windows] Coming soon™
+* [Linux] Coming soon™
+
+Binaries
+========
+
+Go Ethereum comes with several binaries found in
+[cmd](https://github.com/ethereum/go-ethereum/tree/master/cmd):
+
+* `mist` Official Ethereum Browser
+* `ethereum` Ethereum CLI
+* `ethtest` test tool which runs with the [tests](https://github.com/ethereum/testes) suit: 
+  `ethtest "`cat myfile.json`"`.
+* `evm` is a generic Ethereum Virtual Machine: `evm -code 60ff60ff -gas
+  10000 -price 0 -dump`. See `-h` for a detailed description.
+
 General command line options
-====================
+============================
 
 ```
-Shared between ethereum and ethereal
+== Shared between ethereum and Mist ==
+
+= Settings
 -id      Set the custom identifier of the client (shows up on other clients)
 -port    Port on which the server will accept incomming connections
 -upnp    Enable UPnP
 -maxpeer Desired amount of peers
 -rpc     Start JSON RPC
-
 -dir     Data directory used to store configs and databases
--import  Import a private key
--genaddr Generates a new address and private key (destructive action)
--h       This
+
+= Utility 
+-h         This
+-import    Import a private key
+-genaddr   Generates a new address and private key (destructive action)
+-dump      Dump a specific state of a block to stdout given the -number or -hash
+-difftool  Supress all output and prints VM output to stdout
+-diff      vm=only vm output, all=all output including state storage
 
 Ethereum only
 ethereum [options] [filename]
@@ -47,31 +77,34 @@ ethereum [options] [filename]
 filename   Load the given file and interpret as JavaScript
 -m       Start mining blocks
 
-Etheral only
+== Mist only ==
+
 -asset_path    absolute path to GUI assets directory
 ```
 
 Contribution
 ============
 
-If you would like to contribute to Ethereum Go, please fork, fix, commit and
-send a pull request to the main repository. Commits which do not comply with the coding standards explained below
-will be ignored. If you send a pull request, make sure that you
-commit to the `develop` branch and that you do not merge to `master`.
-Commits that are directly based off of the `master` branch instead of the `develop` branch will be ignored.
+If you'd like to contribute to Ethereum please fork, fix, commit and
+send a pull request. Commits who do not comply with the coding standards
+are ignored (use gofmt!). If you send pull requests make absolute sure that you
+commit on the `develop` branch and that you do not merge to master.
+Commits that are directly based on master are simply ignored.
 
-To make this process simpler try following the [git flow](http://nvie.com/posts/a-successful-git-branching-model/) branching model, as it sets this process up and streamlines work flow.
+To make life easier try [git flow](http://nvie.com/posts/a-successful-git-branching-model/) it sets
+this all up and streamlines your work flow.
 
 Coding standards
 ================
 
-Code should be formatted according to the [Go Formatting
+Sources should be formatted according to the [Go Formatting
 Style](http://golang.org/doc/effective_go.html#formatting).
 
-Unless struct fields are supposed to be directly accessible, provide
-getters and hide the fields through Go's exporting facility.
+Unless structs fields are supposed to be directly accesible, provide
+Getters and hide the fields through Go's exporting facility.
 
-Make comments in your code meaningful and only use them when necessary. Describe in detail what your code is trying to achieve. For example, this would be redundant and unnecessary commenting:
+When you comment put meaningfull comments. Describe in detail what you
+want to achieve.
 
 *wrong*
 
@@ -82,7 +115,12 @@ if x > y {
 }
 ```
 
-Everyone reading the source code should know what this code snippet was meant to achieve, and so those are **not** meaningful comments.
+Everyone reading the source probably know what you wanted to achieve
+with above code. Those are **not** meaningful comments.
 
-While this project is constantly tested and run, code tests should be written regardless. There is not time to evaluate every person's code specifically, so it is expected of you to write tests for the code so that it does not have to be tested manually. In fact, contributing by simply writing tests is perfectly fine!
+While the project isn't 100% tested I want you to write tests non the
+less. I haven't got time to evaluate everyone's code in detail so I
+expect you to write tests for me so I don't have to test your code
+manually. (If you want to contribute by just writing tests that's fine
+too!)
 
diff --git a/_data/chain1 b/_data/chain1
new file mode 100755
index 0000000000000000000000000000000000000000..ef392e001ebe06696541a637ab993565bda9d485
Binary files /dev/null and b/_data/chain1 differ
diff --git a/_data/chain2 b/_data/chain2
new file mode 100755
index 0000000000000000000000000000000000000000..48ed4d5ea9e7eb28dffea79a515762c9e457fce4
Binary files /dev/null and b/_data/chain2 differ
diff --git a/block_pool.go b/block_pool.go
new file mode 100644
index 0000000000000000000000000000000000000000..c618f69937bc33f0d769478d44e9d2a0b2bfaec0
--- /dev/null
+++ b/block_pool.go
@@ -0,0 +1,351 @@
+package eth
+
+import (
+	"bytes"
+	"container/list"
+	"fmt"
+	"math"
+	"math/big"
+	"sync"
+	"time"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+var poollogger = logger.NewLogger("BPOOL")
+
+type block struct {
+	from      *Peer
+	peer      *Peer
+	block     *types.Block
+	reqAt     time.Time
+	requested int
+}
+
+type BlockPool struct {
+	mut sync.Mutex
+
+	eth *Ethereum
+
+	hashes [][]byte
+	pool   map[string]*block
+
+	td   *big.Int
+	quit chan bool
+
+	fetchingHashes    bool
+	downloadStartedAt time.Time
+
+	ChainLength, BlocksProcessed int
+
+	peer *Peer
+}
+
+func NewBlockPool(eth *Ethereum) *BlockPool {
+	return &BlockPool{
+		eth:  eth,
+		pool: make(map[string]*block),
+		td:   ethutil.Big0,
+		quit: make(chan bool),
+	}
+}
+
+func (self *BlockPool) Len() int {
+	return len(self.hashes)
+}
+
+func (self *BlockPool) Reset() {
+	self.pool = make(map[string]*block)
+	self.hashes = nil
+}
+
+func (self *BlockPool) HasLatestHash() bool {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	return self.pool[string(self.eth.ChainManager().CurrentBlock().Hash())] != nil
+}
+
+func (self *BlockPool) HasCommonHash(hash []byte) bool {
+	return self.eth.ChainManager().GetBlock(hash) != nil
+}
+
+func (self *BlockPool) Blocks() (blocks types.Blocks) {
+	for _, item := range self.pool {
+		if item.block != nil {
+			blocks = append(blocks, item.block)
+		}
+	}
+
+	return
+}
+
+func (self *BlockPool) FetchHashes(peer *Peer) bool {
+	highestTd := self.eth.HighestTDPeer()
+
+	if (self.peer == nil && peer.td.Cmp(highestTd) >= 0) || (self.peer != nil && peer.td.Cmp(self.peer.td) > 0) || self.peer == peer {
+		if self.peer != peer {
+			poollogger.Infof("Found better suitable peer (%v vs %v)\n", self.td, peer.td)
+
+			if self.peer != nil {
+				self.peer.doneFetchingHashes = true
+			}
+		}
+
+		self.peer = peer
+		self.td = peer.td
+
+		if !self.HasLatestHash() {
+			self.fetchHashes()
+		}
+
+		return true
+	}
+
+	return false
+}
+
+func (self *BlockPool) fetchHashes() {
+	peer := self.peer
+
+	peer.doneFetchingHashes = false
+
+	const amount = 256
+	peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4])
+	peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)}))
+}
+
+func (self *BlockPool) AddHash(hash []byte, peer *Peer) {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	if self.pool[string(hash)] == nil {
+		self.pool[string(hash)] = &block{peer, nil, nil, time.Now(), 0}
+
+		self.hashes = append([][]byte{hash}, self.hashes...)
+	}
+}
+
+func (self *BlockPool) Add(b *types.Block, peer *Peer) {
+	self.addBlock(b, peer, false)
+}
+
+func (self *BlockPool) AddNew(b *types.Block, peer *Peer) {
+	self.addBlock(b, peer, true)
+}
+
+func (self *BlockPool) addBlock(b *types.Block, peer *Peer, newBlock bool) {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	hash := string(b.Hash())
+
+	if self.pool[hash] == nil && !self.eth.ChainManager().HasBlock(b.Hash()) {
+		poollogger.Infof("Got unrequested block (%x...)\n", hash[0:4])
+
+		self.hashes = append(self.hashes, b.Hash())
+		self.pool[hash] = &block{peer, peer, b, time.Now(), 0}
+
+		// The following is only performed on an unrequested new block
+		if newBlock {
+			fmt.Println("1.", !self.eth.ChainManager().HasBlock(b.PrevHash), ethutil.Bytes2Hex(b.Hash()[0:4]), ethutil.Bytes2Hex(b.PrevHash[0:4]))
+			fmt.Println("2.", self.pool[string(b.PrevHash)] == nil)
+			fmt.Println("3.", !self.fetchingHashes)
+			if !self.eth.ChainManager().HasBlock(b.PrevHash) /*&& self.pool[string(b.PrevHash)] == nil*/ && !self.fetchingHashes {
+				poollogger.Infof("Unknown chain, requesting (%x...)\n", b.PrevHash[0:4])
+				peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{b.Hash(), uint32(256)}))
+			}
+		}
+	} else if self.pool[hash] != nil {
+		self.pool[hash].block = b
+	}
+
+	self.BlocksProcessed++
+}
+
+func (self *BlockPool) Remove(hash []byte) {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	self.hashes = ethutil.DeleteFromByteSlice(self.hashes, hash)
+	delete(self.pool, string(hash))
+}
+
+func (self *BlockPool) DistributeHashes() {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	var (
+		peerLen = self.eth.peers.Len()
+		amount  = 256 * peerLen
+		dist    = make(map[*Peer][][]byte)
+	)
+
+	num := int(math.Min(float64(amount), float64(len(self.pool))))
+	for i, j := 0, 0; i < len(self.hashes) && j < num; i++ {
+		hash := self.hashes[i]
+		item := self.pool[string(hash)]
+
+		if item != nil && item.block == nil {
+			var peer *Peer
+			lastFetchFailed := time.Since(item.reqAt) > 5*time.Second
+
+			// Handle failed requests
+			if lastFetchFailed && item.requested > 5 && item.peer != nil {
+				if item.requested < 100 {
+					// Select peer the hash was retrieved off
+					peer = item.from
+				} else {
+					// Remove it
+					self.hashes = ethutil.DeleteFromByteSlice(self.hashes, hash)
+					delete(self.pool, string(hash))
+				}
+			} else if lastFetchFailed || item.peer == nil {
+				// Find a suitable, available peer
+				eachPeer(self.eth.peers, func(p *Peer, v *list.Element) {
+					if peer == nil && len(dist[p]) < amount/peerLen && p.statusKnown {
+						peer = p
+					}
+				})
+			}
+
+			if peer != nil {
+				item.reqAt = time.Now()
+				item.peer = peer
+				item.requested++
+
+				dist[peer] = append(dist[peer], hash)
+			}
+		}
+	}
+
+	for peer, hashes := range dist {
+		peer.FetchBlocks(hashes)
+	}
+
+	if len(dist) > 0 {
+		self.downloadStartedAt = time.Now()
+	}
+}
+
+func (self *BlockPool) Start() {
+	go self.downloadThread()
+	go self.chainThread()
+}
+
+func (self *BlockPool) Stop() {
+	close(self.quit)
+}
+
+func (self *BlockPool) downloadThread() {
+	serviceTimer := time.NewTicker(100 * time.Millisecond)
+out:
+	for {
+		select {
+		case <-self.quit:
+			break out
+		case <-serviceTimer.C:
+			// Check if we're catching up. If not distribute the hashes to
+			// the peers and download the blockchain
+			self.fetchingHashes = false
+			eachPeer(self.eth.peers, func(p *Peer, v *list.Element) {
+				if p.statusKnown && p.FetchingHashes() {
+					self.fetchingHashes = true
+				}
+			})
+
+			if len(self.hashes) > 0 {
+				self.DistributeHashes()
+			}
+
+			if self.ChainLength < len(self.hashes) {
+				self.ChainLength = len(self.hashes)
+			}
+
+			if self.peer != nil &&
+				!self.peer.doneFetchingHashes &&
+				time.Since(self.peer.lastHashAt) > 10*time.Second &&
+				time.Since(self.peer.lastHashRequestedAt) > 5*time.Second {
+				self.fetchHashes()
+			}
+
+			/*
+				if !self.fetchingHashes {
+					blocks := self.Blocks()
+					chain.BlockBy(chain.Number).Sort(blocks)
+
+					if len(blocks) > 0 {
+						if !self.eth.ChainManager().HasBlock(b.PrevHash) && self.pool[string(b.PrevHash)] == nil && !self.fetchingHashes {
+						}
+					}
+				}
+			*/
+		}
+	}
+}
+
+func (self *BlockPool) chainThread() {
+	procTimer := time.NewTicker(500 * time.Millisecond)
+out:
+	for {
+		select {
+		case <-self.quit:
+			break out
+		case <-procTimer.C:
+			blocks := self.Blocks()
+			types.BlockBy(types.Number).Sort(blocks)
+
+			// Find common block
+			for i, block := range blocks {
+				if self.eth.ChainManager().HasBlock(block.PrevHash) {
+					blocks = blocks[i:]
+					break
+				}
+			}
+
+			if len(blocks) > 0 {
+				if self.eth.ChainManager().HasBlock(blocks[0].PrevHash) {
+					for i, block := range blocks[1:] {
+						// NOTE: The Ith element in this loop refers to the previous block in
+						// outer "blocks"
+						if bytes.Compare(block.PrevHash, blocks[i].Hash()) != 0 {
+							blocks = blocks[:i]
+
+							break
+						}
+					}
+				} else {
+					blocks = nil
+				}
+			}
+
+			if len(blocks) > 0 {
+				chainman := self.eth.ChainManager()
+
+				err := chainman.InsertChain(blocks)
+				if err != nil {
+					poollogger.Debugln(err)
+
+					self.Reset()
+
+					if self.peer != nil && self.peer.conn != nil {
+						poollogger.Debugf("Punishing peer for supplying bad chain (%v)\n", self.peer.conn.RemoteAddr())
+					}
+
+					// This peer gave us bad hashes and made us fetch a bad chain, therefor he shall be punished.
+					self.eth.BlacklistPeer(self.peer)
+					self.peer.StopWithReason(DiscBadPeer)
+					self.td = ethutil.Big0
+					self.peer = nil
+				}
+
+				for _, block := range blocks {
+					self.Remove(block.Hash())
+				}
+			}
+		}
+	}
+}
diff --git a/cmd/LICENSE b/cmd/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..78efdaabe9d71de384bda09447903e48f54f685d
--- /dev/null
+++ b/cmd/LICENSE
@@ -0,0 +1,16 @@
+Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+MA 02110-1301  USA
diff --git a/cmd/ethereum/cmd.go b/cmd/ethereum/cmd.go
new file mode 100644
index 0000000000000000000000000000000000000000..8710d6136ed18c76d922d6c89a804a8f5f2387ae
--- /dev/null
+++ b/cmd/ethereum/cmd.go
@@ -0,0 +1,52 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+package main
+
+import (
+	"io/ioutil"
+	"os"
+
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/cmd/ethereum/repl"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/javascript"
+)
+
+func InitJsConsole(ethereum *eth.Ethereum) {
+	repl := ethrepl.NewJSRepl(ethereum)
+	go repl.Start()
+	utils.RegisterInterrupt(func(os.Signal) {
+		repl.Stop()
+	})
+}
+
+func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
+	file, err := os.Open(InputFile)
+	if err != nil {
+		clilogger.Fatalln(err)
+	}
+	content, err := ioutil.ReadAll(file)
+	if err != nil {
+		clilogger.Fatalln(err)
+	}
+	re := javascript.NewJSRE(ethereum)
+	utils.RegisterInterrupt(func(os.Signal) {
+		re.Stop()
+	})
+	re.Run(string(content))
+}
diff --git a/ethereum/flags.go b/cmd/ethereum/flags.go
similarity index 73%
rename from ethereum/flags.go
rename to cmd/ethereum/flags.go
index 58220f4e6bc6988dcaf466c3f2db89997360613f..85aca47c36d09f4dda64b1b0bb6b412774876866 100644
--- a/ethereum/flags.go
+++ b/cmd/ethereum/flags.go
@@ -1,13 +1,32 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
 	"flag"
 	"fmt"
+	"log"
 	"os"
 	"os/user"
 	"path"
 
-	"github.com/ethereum/eth-go/ethlog"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/vm"
 )
 
 var (
@@ -37,6 +56,7 @@ var (
 	Dump            bool
 	DumpHash        string
 	DumpNumber      int
+	VmType          int
 )
 
 // flags specific to cli client
@@ -59,12 +79,13 @@ func Init() {
 		flag.PrintDefaults()
 	}
 
+	flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug")
 	flag.StringVar(&Identifier, "id", "", "Custom client identifier")
 	flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
 	flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)")
 	flag.StringVar(&OutboundPort, "port", "30303", "listening port")
 	flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
-	flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers")
+	flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers")
 	flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on")
 	flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
 	flag.BoolVar(&StartWebSockets, "ws", false, "start websocket server")
@@ -77,7 +98,7 @@ func Init() {
 	flag.StringVar(&Datadir, "datadir", defaultDataDir(), "specifies the datadir to use")
 	flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
 	flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
-	flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
+	flag.IntVar(&LogLevel, "loglevel", int(logger.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
 	flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0")
 	flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false")
 	flag.BoolVar(&ShowGenesis, "genesis", false, "Dump the genesis block")
@@ -91,5 +112,9 @@ func Init() {
 
 	flag.Parse()
 
+	if VmType >= int(vm.MaxVmTy) {
+		log.Fatal("Invalid VM type ", VmType)
+	}
+
 	InputFile = flag.Arg(0)
 }
diff --git a/ethereum/main.go b/cmd/ethereum/main.go
similarity index 55%
rename from ethereum/main.go
rename to cmd/ethereum/main.go
index 0f0df20bbd8d8230fed16d02154cda089e7e274a..2a3c4605467ec13f2613450014c1119a5f946c3a 100644
--- a/ethereum/main.go
+++ b/cmd/ethereum/main.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
@@ -5,18 +22,18 @@ import (
 	"os"
 	"runtime"
 
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/go-ethereum/utils"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
 )
 
 const (
 	ClientIdentifier = "Ethereum(G)"
-	Version          = "0.6.7"
+	Version          = "0.7.10"
 )
 
-var logger = ethlog.NewLogger("CLI")
+var clilogger = logger.NewLogger("CLI")
 
 func main() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
@@ -31,7 +48,7 @@ func main() {
 		LogLevel = 0
 	}
 
-	utils.InitConfig(ConfigFile, Datadir, "ETH")
+	utils.InitConfig(VmType, ConfigFile, Datadir, "ETH")
 	ethutil.Config.Diff = DiffTool
 	ethutil.Config.DiffType = DiffType
 
@@ -42,7 +59,7 @@ func main() {
 	db := utils.NewDatabase()
 	err := utils.DBSanityCheck(db)
 	if err != nil {
-		logger.Errorln(err)
+		fmt.Println(err)
 
 		os.Exit(1)
 	}
@@ -57,14 +74,14 @@ func main() {
 	ethereum := utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer)
 
 	if Dump {
-		var block *ethchain.Block
+		var block *types.Block
 
 		if len(DumpHash) == 0 && DumpNumber == -1 {
-			block = ethereum.BlockChain().CurrentBlock
+			block = ethereum.ChainManager().CurrentBlock()
 		} else if len(DumpHash) > 0 {
-			block = ethereum.BlockChain().GetBlock(ethutil.Hex2Bytes(DumpHash))
+			block = ethereum.ChainManager().GetBlock(ethutil.Hex2Bytes(DumpHash))
 		} else {
-			block = ethereum.BlockChain().GetBlockByNumber(uint64(DumpNumber))
+			block = ethereum.ChainManager().GetBlockByNumber(uint64(DumpNumber))
 		}
 
 		if block == nil {
@@ -76,11 +93,14 @@ func main() {
 			os.Exit(1)
 		}
 
-		fmt.Printf("RLP: %x\nstate: %x\nhash: %x\n", ethutil.Rlp(block), block.GetRoot(), block.Hash())
+		// block.GetRoot() does not exist
+		//fmt.Printf("RLP: %x\nstate: %x\nhash: %x\n", ethutil.Rlp(block), block.GetRoot(), block.Hash())
 
 		// Leave the Println. This needs clean output for piping
 		fmt.Printf("%s\n", block.State().Dump())
 
+		fmt.Println(block)
+
 		os.Exit(0)
 	}
 
@@ -111,5 +131,5 @@ func main() {
 
 	// this blocks the thread
 	ethereum.WaitForShutdown()
-	ethlog.Flush()
+	logger.Flush()
 }
diff --git a/cmd/ethereum/repl/console_colors_windows.go b/cmd/ethereum/repl/console_colors_windows.go
new file mode 100644
index 0000000000000000000000000000000000000000..8062746fbbceaf8240bfb27ba5aed538aedbe1ad
--- /dev/null
+++ b/cmd/ethereum/repl/console_colors_windows.go
@@ -0,0 +1,97 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+/* Inspired by https://github.com/xuyu/logging/blob/master/colorful_win.go */
+
+package ethrepl
+
+import (
+	"syscall"
+	"unsafe"
+)
+
+type color uint16
+
+const (
+	green  = color(0x0002)
+	red    = color(0x0004)
+	yellow = color(0x000E)
+)
+
+const (
+	mask = uint16(yellow | green | red)
+)
+
+var (
+	kernel32                       = syscall.NewLazyDLL("kernel32.dll")
+	procGetStdHandle               = kernel32.NewProc("GetStdHandle")
+	procSetConsoleTextAttribute    = kernel32.NewProc("SetConsoleTextAttribute")
+	procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
+	hStdout                        uintptr
+	initScreenInfo                 *consoleScreenBufferInfo
+)
+
+func setConsoleTextAttribute(hConsoleOutput uintptr, wAttributes uint16) bool {
+	ret, _, _ := procSetConsoleTextAttribute.Call(hConsoleOutput, uintptr(wAttributes))
+	return ret != 0
+}
+
+type coord struct {
+	X, Y int16
+}
+
+type smallRect struct {
+	Left, Top, Right, Bottom int16
+}
+
+type consoleScreenBufferInfo struct {
+	DwSize              coord
+	DwCursorPosition    coord
+	WAttributes         uint16
+	SrWindow            smallRect
+	DwMaximumWindowSize coord
+}
+
+func getConsoleScreenBufferInfo(hConsoleOutput uintptr) *consoleScreenBufferInfo {
+	var csbi consoleScreenBufferInfo
+	ret, _, _ := procGetConsoleScreenBufferInfo.Call(hConsoleOutput, uintptr(unsafe.Pointer(&csbi)))
+	if ret == 0 {
+		return nil
+	}
+	return &csbi
+}
+
+const (
+	stdOutputHandle = uint32(-11 & 0xFFFFFFFF)
+)
+
+func init() {
+	hStdout, _, _ = procGetStdHandle.Call(uintptr(stdOutputHandle))
+	initScreenInfo = getConsoleScreenBufferInfo(hStdout)
+}
+
+func resetColorful() {
+	if initScreenInfo == nil {
+		return
+	}
+	setConsoleTextAttribute(hStdout, initScreenInfo.WAttributes)
+}
+
+func changeColor(c color) {
+	attr := uint16(0) & ^mask | uint16(c)
+	setConsoleTextAttribute(hStdout, attr)
+}
diff --git a/ethereum/repl/repl.go b/cmd/ethereum/repl/repl.go
similarity index 54%
rename from ethereum/repl/repl.go
rename to cmd/ethereum/repl/repl.go
index d08feb7b437cff68f5f6d316b9037d4492c6f5a5..a5146fecdc8acf5fbca2988d346e7934b19839a9 100644
--- a/ethereum/repl/repl.go
+++ b/cmd/ethereum/repl/repl.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package ethrepl
 
 import (
@@ -7,13 +24,13 @@ import (
 	"os"
 	"path"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/javascript"
+	"github.com/ethereum/go-ethereum/logger"
 )
 
-var logger = ethlog.NewLogger("REPL")
+var repllogger = logger.NewLogger("REPL")
 
 type Repl interface {
 	Start()
@@ -42,7 +59,7 @@ func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
 func (self *JSRepl) Start() {
 	if !self.running {
 		self.running = true
-		logger.Infoln("init JS Console")
+		repllogger.Infoln("init JS Console")
 		reader := bufio.NewReader(self.history)
 		for {
 			line, err := reader.ReadString('\n')
@@ -63,7 +80,7 @@ func (self *JSRepl) Stop() {
 	if self.running {
 		self.running = false
 		self.re.Stop()
-		logger.Infoln("exit JS Console")
+		repllogger.Infoln("exit JS Console")
 		self.history.Close()
 	}
 }
diff --git a/ethereum/repl/repl_darwin.go b/cmd/ethereum/repl/repl_darwin.go
similarity index 70%
rename from ethereum/repl/repl_darwin.go
rename to cmd/ethereum/repl/repl_darwin.go
index 4c07280f70ed1879639229467eff2fde14356591..3710150cc904c0e2a7bb66220276c341f27e448b 100644
--- a/ethereum/repl/repl_darwin.go
+++ b/cmd/ethereum/repl/repl_darwin.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package ethrepl
 
 // #cgo darwin CFLAGS: -I/usr/local/opt/readline/include
@@ -9,6 +26,7 @@ package ethrepl
 // #include <readline/history.h>
 import "C"
 import (
+	"fmt"
 	"os"
 	"os/signal"
 	"strings"
@@ -118,6 +136,9 @@ func (self *JSRepl) PrintValue(v interface{}) {
 	method, _ := self.re.Vm.Get("prettyPrint")
 	v, err := self.re.Vm.ToValue(v)
 	if err == nil {
-		method.Call(method, v)
+		val, err := method.Call(method, v)
+		if err == nil {
+			fmt.Printf("%v", val)
+		}
 	}
 }
diff --git a/ethereum/repl/repl_linux.go b/cmd/ethereum/repl/repl_linux.go
similarity index 100%
rename from ethereum/repl/repl_linux.go
rename to cmd/ethereum/repl/repl_linux.go
diff --git a/cmd/ethereum/repl/repl_windows.go b/cmd/ethereum/repl/repl_windows.go
new file mode 100644
index 0000000000000000000000000000000000000000..d2c405ee9b0e122c1a3f3caa70392f837b915119
--- /dev/null
+++ b/cmd/ethereum/repl/repl_windows.go
@@ -0,0 +1,92 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+package ethrepl
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"strings"
+)
+
+func (self *JSRepl) read() {
+	reader := bufio.NewReader(os.Stdin)
+	for {
+		fmt.Printf(self.prompt)
+		str, _, err := reader.ReadLine()
+		if err != nil {
+			fmt.Println("Error reading input", err)
+		} else {
+			if string(str) == "exit" {
+				self.Stop()
+				break
+			} else {
+				self.parseInput(string(str))
+			}
+		}
+	}
+}
+
+func addHistory(s string) {
+}
+
+func printColored(outputVal string) {
+	for outputVal != "" {
+		codePart := ""
+		if strings.HasPrefix(outputVal, "\033[32m") {
+			codePart = "\033[32m"
+			changeColor(2)
+		}
+		if strings.HasPrefix(outputVal, "\033[1m\033[30m") {
+			codePart = "\033[1m\033[30m"
+			changeColor(8)
+		}
+		if strings.HasPrefix(outputVal, "\033[31m") {
+			codePart = "\033[31m"
+			changeColor(red)
+		}
+		if strings.HasPrefix(outputVal, "\033[35m") {
+			codePart = "\033[35m"
+			changeColor(5)
+		}
+		if strings.HasPrefix(outputVal, "\033[0m") {
+			codePart = "\033[0m"
+			resetColorful()
+		}
+		textPart := outputVal[len(codePart):len(outputVal)]
+		index := strings.Index(textPart, "\033")
+		if index == -1 {
+			outputVal = ""
+		} else {
+			outputVal = textPart[index:len(textPart)]
+			textPart = textPart[0:index]
+		}
+		fmt.Printf("%v", textPart)
+	}
+}
+
+func (self *JSRepl) PrintValue(v interface{}) {
+	method, _ := self.re.Vm.Get("prettyPrint")
+	v, err := self.re.Vm.ToValue(v)
+	if err == nil {
+		val, err := method.Call(method, v)
+		if err == nil {
+			printColored(fmt.Sprintf("%v", val))
+		}
+	}
+}
diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..94ab779dbad455d6a02a3bf027233df3c8e82196
--- /dev/null
+++ b/cmd/ethtest/main.go
@@ -0,0 +1,128 @@
+/*
+	This file is part of go-ethereum
+
+	go-ethereum is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	go-ethereum is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with go-ethereum.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * @authors:
+ * 	Jeffrey Wilcke <i@jev.io>
+ * @date 2014
+ *
+ */
+
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"io/ioutil"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/tests/helper"
+)
+
+type Account struct {
+	Balance string
+	Code    string
+	Nonce   string
+	Storage map[string]string
+}
+
+func StateObjectFromAccount(addr string, account Account) *state.StateObject {
+	obj := state.NewStateObject(ethutil.Hex2Bytes(addr))
+	obj.SetBalance(ethutil.Big(account.Balance))
+
+	if ethutil.IsHex(account.Code) {
+		account.Code = account.Code[2:]
+	}
+	obj.Code = ethutil.Hex2Bytes(account.Code)
+	obj.Nonce = ethutil.Big(account.Nonce).Uint64()
+
+	return obj
+}
+
+type VmTest struct {
+	Callcreates interface{}
+	Env         map[string]string
+	Exec        map[string]string
+	Gas         string
+	Out         string
+	Post        map[string]Account
+	Pre         map[string]Account
+}
+
+func RunVmTest(js string) (failed int) {
+	tests := make(map[string]VmTest)
+
+	data, _ := ioutil.ReadAll(strings.NewReader(js))
+	err := json.Unmarshal(data, &tests)
+	if err != nil {
+		log.Fatalln(err)
+	}
+
+	for name, test := range tests {
+		state := state.New(helper.NewTrie())
+		for addr, account := range test.Pre {
+			obj := StateObjectFromAccount(addr, account)
+			state.SetStateObject(obj)
+		}
+
+		ret, _, gas, err := helper.RunVm(state, test.Env, test.Exec)
+		// When an error is returned it doesn't always mean the tests fails.
+		// Have to come up with some conditional failing mechanism.
+		if err != nil {
+			log.Println(err)
+		}
+
+		rexp := helper.FromHex(test.Out)
+		if bytes.Compare(rexp, ret) != 0 {
+			log.Printf("%s's return failed. Expected %x, got %x\n", name, rexp, ret)
+			failed = 1
+		}
+
+		gexp := ethutil.Big(test.Gas)
+		if gexp.Cmp(gas) != 0 {
+			log.Printf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas)
+			failed = 1
+		}
+
+		for addr, account := range test.Post {
+			obj := state.GetStateObject(helper.FromHex(addr))
+			for addr, value := range account.Storage {
+				v := obj.GetState(helper.FromHex(addr)).Bytes()
+				vexp := helper.FromHex(value)
+
+				if bytes.Compare(v, vexp) != 0 {
+					log.Printf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v))
+					failed = 1
+				}
+			}
+		}
+	}
+
+	return
+}
+
+func main() {
+	helper.Logger.SetLogLevel(5)
+	if len(os.Args) == 1 {
+		log.Fatalln("no json supplied")
+	}
+
+	os.Exit(RunVmTest(os.Args[1]))
+}
diff --git a/cmd/evm/code.txt b/cmd/evm/code.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a964ad9d2fbe8219d55443c62e12fa6544dedcb2
--- /dev/null
+++ b/cmd/evm/code.txt
@@ -0,0 +1 @@
+60006102ff5360003560001a60008114156103395760013560405260216040516020025990590160009052606052604051602002816060513760405160200281019050506002604051121561005957604051602002606051f35b604051602002599059016000905260a052600060c052604051602002599059016000905260e0526000610100526001610120525b604051610120511215610109576060515161012051602002606051015112156100d8576101205160200260605101516101005160200260e051015260016101005101610100526100f9565b61012051602002606051015160c05160200260a0510152600160c0510160c0525b600161012051016101205261008d565b60216020599059016000905260c051808252806020028301925050602082015990590160009052600081538151600182015260218101825160200260a0518260005b8381101561016657808301518186015260208101905061014b565b50505050825160200281019050604059905901600090526102405281610240515283602061024051015261024051905090509050905060c05160200280599059016000905281816020850151855160003060195a03f1508090509050905060a05260216020599059016000905261010051808252806020028301925050602082015990590160009052600081538151600182015260218101825160200260e0518260005b8381101561022557808301518186015260208101905061020a565b50505050825160200281019050604059905901600090526102c052816102c051528360206102c05101526102c05190509050905090506101005160200280599059016000905281816020850151855160003060195a03f1508090509050905060e05260405160200259905901600090526102e0526000610120525b610100516101205112156102d7576101205160200260e0510151610120516020026102e051015260016101205101610120526102a0565b60605151610100516020026102e05101526000610120525b60c05161012051121561032d576101205160200260a05101516101205160016101005101016020026102e051015260016101205101610120526102ef565b6040516020026102e051f35b50
diff --git a/cmd/evm/input.txt b/cmd/evm/input.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1b6857ab975d3ea9e1d9b7b8bef1d795d2ffd49b
--- /dev/null
+++ b/cmd/evm/input.txt
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000043000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004700000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000004b000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000004f0000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005100000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000000000000000000000000000000000000053000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000005700000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000059000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000005f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000066000000000000000000000000000000000000000000000000000000000000006700000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000006b000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006e000000000000000000000000000000000000000000000000000000000000006f0000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007100000000000000000000000000000000000000000000000000000000000000720000000000000000000000000000000000000000000000000000000000000073000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000000750000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000000000000000079000000000000000000000000000000000000000000000000000000000000007a000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000850000000000000000000000000000000000000000000000000000000000000086000000000000000000000000000000000000000000000000000000000000008700000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000000000000000008a000000000000000000000000000000000000000000000000000000000000008b000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000008d000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000000008f0000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009100000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000093000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000950000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000009700000000000000000000000000000000000000000000000000000000000000980000000000000000000000000000000000000000000000000000000000000099000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000009b000000000000000000000000000000000000000000000000000000000000009c000000000000000000000000000000000000000000000000000000000000009d000000000000000000000000000000000000000000000000000000000000009e000000000000000000000000000000000000000000000000000000000000009f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a100000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000a300000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a500000000000000000000000000000000000000000000000000000000000000a600000000000000000000000000000000000000000000000000000000000000a700000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000a900000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000ab00000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000ad00000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000af00000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b100000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b300000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000b500000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000b700000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000b900000000000000000000000000000000000000000000000000000000000000ba00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000bc00000000000000000000000000000000000000000000000000000000000000bd00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000bf00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000c200000000000000000000000000000000000000000000000000000000000000c300000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000c500000000000000000000000000000000000000000000000000000000000000c600000000000000000000000000000000000000000000000000000000000000c7
diff --git a/cmd/evm/main.go b/cmd/evm/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..c6c986a04ae5a5702660e43692d6ce1886327826
--- /dev/null
+++ b/cmd/evm/main.go
@@ -0,0 +1,164 @@
+/*
+	This file is part of go-ethereum
+
+	go-ethereum is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	go-ethereum is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with go-ethereum.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * @authors
+ * 	Jeffrey Wilcke <i@jev.io>
+ * @date 2014
+ *
+ */
+
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"math/big"
+	"os"
+	"runtime"
+	"time"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/trie"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+var (
+	code     = flag.String("code", "", "evm code")
+	loglevel = flag.Int("log", 4, "log level")
+	gas      = flag.String("gas", "1000000000", "gas amount")
+	price    = flag.String("price", "0", "gas price")
+	value    = flag.String("value", "0", "tx value")
+	dump     = flag.Bool("dump", false, "dump state after run")
+	data     = flag.String("data", "", "data")
+)
+
+func perr(v ...interface{}) {
+	fmt.Println(v...)
+	//os.Exit(1)
+}
+
+func main() {
+	flag.Parse()
+
+	logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.LogLevel(*loglevel)))
+
+	ethutil.ReadConfig("/tmp/evmtest", "/tmp/evm", "")
+
+	db, _ := ethdb.NewMemDatabase()
+	statedb := state.New(trie.New(db, ""))
+	sender := statedb.NewStateObject([]byte("sender"))
+	receiver := statedb.NewStateObject([]byte("receiver"))
+	//receiver.SetCode([]byte(*code))
+	receiver.SetCode(ethutil.Hex2Bytes(*code))
+
+	vmenv := NewEnv(statedb, []byte("evmuser"), ethutil.Big(*value))
+
+	tstart := time.Now()
+
+	ret, e := vmenv.Call(sender, receiver.Address(), ethutil.Hex2Bytes(*data), ethutil.Big(*gas), ethutil.Big(*price), ethutil.Big(*value))
+
+	logger.Flush()
+	if e != nil {
+		perr(e)
+	}
+
+	if *dump {
+		fmt.Println(string(statedb.Dump()))
+	}
+
+	var mem runtime.MemStats
+	runtime.ReadMemStats(&mem)
+	fmt.Printf("vm took %v\n", time.Since(tstart))
+	fmt.Printf(`alloc:      %d
+tot alloc:  %d
+no. malloc: %d
+heap alloc: %d
+heap objs:  %d
+num gc:     %d
+`, mem.Alloc, mem.TotalAlloc, mem.Mallocs, mem.HeapAlloc, mem.HeapObjects, mem.NumGC)
+
+	fmt.Printf("%x\n", ret)
+}
+
+type VMEnv struct {
+	state *state.StateDB
+	block *types.Block
+
+	transactor []byte
+	value      *big.Int
+
+	depth int
+	Gas   *big.Int
+	time  int64
+}
+
+func NewEnv(state *state.StateDB, transactor []byte, value *big.Int) *VMEnv {
+	return &VMEnv{
+		state:      state,
+		transactor: transactor,
+		value:      value,
+		time:       time.Now().Unix(),
+	}
+}
+
+func (self *VMEnv) State() *state.StateDB { return self.state }
+func (self *VMEnv) Origin() []byte        { return self.transactor }
+func (self *VMEnv) BlockNumber() *big.Int { return ethutil.Big0 }
+func (self *VMEnv) PrevHash() []byte      { return make([]byte, 32) }
+func (self *VMEnv) Coinbase() []byte      { return self.transactor }
+func (self *VMEnv) Time() int64           { return self.time }
+func (self *VMEnv) Difficulty() *big.Int  { return ethutil.Big1 }
+func (self *VMEnv) BlockHash() []byte     { return make([]byte, 32) }
+func (self *VMEnv) Value() *big.Int       { return self.value }
+func (self *VMEnv) GasLimit() *big.Int    { return big.NewInt(1000000000) }
+func (self *VMEnv) Depth() int            { return 0 }
+func (self *VMEnv) SetDepth(i int)        { self.depth = i }
+func (self *VMEnv) AddLog(log state.Log) {
+	self.state.AddLog(log)
+}
+func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error {
+	return vm.Transfer(from, to, amount)
+}
+
+func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution {
+	evm := vm.New(self, vm.DebugVmTy)
+
+	return core.NewExecution(evm, addr, data, gas, price, value)
+}
+
+func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(addr, data, gas, price, value)
+	ret, err := exe.Call(addr, caller)
+	self.Gas = exe.Gas
+
+	return ret, err
+}
+func (self *VMEnv) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(caller.Address(), data, gas, price, value)
+	return exe.Call(addr, caller)
+}
+
+func (self *VMEnv) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Create(caller)
+}
diff --git a/mist/assets/back.png b/cmd/mist/assets/back.png
similarity index 100%
rename from mist/assets/back.png
rename to cmd/mist/assets/back.png
diff --git a/mist/assets/browser.png b/cmd/mist/assets/browser.png
similarity index 100%
rename from mist/assets/browser.png
rename to cmd/mist/assets/browser.png
diff --git a/mist/assets/bug.png b/cmd/mist/assets/bug.png
similarity index 100%
rename from mist/assets/bug.png
rename to cmd/mist/assets/bug.png
diff --git a/mist/assets/close.png b/cmd/mist/assets/close.png
similarity index 100%
rename from mist/assets/close.png
rename to cmd/mist/assets/close.png
diff --git a/mist/assets/debugger/debugger.qml b/cmd/mist/assets/debugger/debugger.qml
similarity index 100%
rename from mist/assets/debugger/debugger.qml
rename to cmd/mist/assets/debugger/debugger.qml
diff --git a/mist/assets/ext/big.js b/cmd/mist/assets/ext/big.js
similarity index 94%
rename from mist/assets/ext/big.js
rename to cmd/mist/assets/ext/big.js
index db633fd2f2899fac7dd5b98e42b1e7be1833c656..daa8d72271b16566780b7b244ea1dd4009e9ca2e 100644
--- a/mist/assets/ext/big.js
+++ b/cmd/mist/assets/ext/big.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 var bigInt = (function () {
     var base = 10000000, logBase = 7;
     var sign = {
diff --git a/cmd/mist/assets/ext/eth.js/.gitignore b/cmd/mist/assets/ext/eth.js/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..de3a847ace5001c560b8164f6cdff8bf52fc441e
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/.gitignore
@@ -0,0 +1,14 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile ~/.gitignore_global
+
+/tmp
+*/**/*un~
+*un~
+.DS_Store
+*/**/.DS_Store
+ethereum/ethereum
+ethereal/ethereal
+
diff --git a/cmd/mist/assets/ext/eth.js/README.md b/cmd/mist/assets/ext/eth.js/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..86e2969beff8bc03e89f14c2543f8862d7d84c9f
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/README.md
@@ -0,0 +1,18 @@
+# Ethereum JavaScript API
+
+This is the Ethereum compatible JavaScript API using `Promise`s
+which implements the [Generic JSON RPC](https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC) spec.
+
+For an example see `index.html`.
+
+**Please note this repo is in it's early stage.**
+
+If you'd like to run a WebSocket ethereum node check out
+[go-ethereum](https://github.com/ethereum/go-ethereum).
+
+To install ethereum and spawn a node:
+
+```
+go get github.com/ethereum/go-ethereum/ethereum
+ethereum -ws -loglevel=4
+```
diff --git a/cmd/mist/assets/ext/eth.js/httprpc.js b/cmd/mist/assets/ext/eth.js/httprpc.js
new file mode 100644
index 0000000000000000000000000000000000000000..085b4693d4068307b03421c3119563ce5fdbabca
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/httprpc.js
@@ -0,0 +1,70 @@
+(function () {
+    var HttpRpcProvider = function (host) {
+        this.handlers = [];
+        this.host = host;
+    };
+
+    function formatJsonRpcObject(object) {
+        return {
+            jsonrpc: '2.0',
+            method: object.call,
+            params: object.args,
+            id: object._id
+        }
+    };
+
+    function formatJsonRpcMessage(message) {    
+        var object = JSON.parse(message);
+       
+        return {
+            _id: object.id,
+            data: object.result
+        };
+    };
+
+    HttpRpcProvider.prototype.sendRequest = function (payload, cb) {
+        var data = formatJsonRpcObject(payload);
+
+        var request = new XMLHttpRequest();
+        request.open("POST", this.host, true);
+        request.send(JSON.stringify(data));
+        request.onreadystatechange = function () {
+            if (request.readyState === 4 && cb) {
+                cb(request);
+            }
+        }
+    };
+
+    HttpRpcProvider.prototype.send = function (payload) {
+        var self = this;
+        this.sendRequest(payload, function (request) {
+            self.handlers.forEach(function (handler) {
+                handler.call(self, formatJsonRpcMessage(request.responseText));
+            });
+        });
+    };
+
+    HttpRpcProvider.prototype.poll = function (payload, id) {
+        var self = this;
+        this.sendRequest(payload, function (request) {
+            var parsed = JSON.parse(request.responseText);
+            if (parsed.result instanceof Array ? parsed.result.length === 0 : !parsed.result) {
+                return;
+            }
+            self.handlers.forEach(function (handler) {
+                handler.call(self, {_event: payload.call, _id: id, data: parsed.result});
+            });
+        });
+    };
+
+    Object.defineProperty(HttpRpcProvider.prototype, "onmessage", {
+        set: function (handler) {
+            this.handlers.push(handler);
+        }
+    });
+
+    if (typeof(web3) !== "undefined" && web3.providers !== undefined) {
+        web3.providers.HttpRpcProvider = HttpRpcProvider;
+    }
+})();
+
diff --git a/cmd/mist/assets/ext/eth.js/index.html b/cmd/mist/assets/ext/eth.js/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b3f50a1413cf9600b5d9fc36b563a7dcb3b7008
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/index.html
@@ -0,0 +1,33 @@
+<!doctype>
+<html>
+
+<head>
+<script type="text/javascript" src="main.js"></script>
+<script type="text/javascript" src="websocket.js"></script>
+<script type="text/javascript" src="qt.js"></script>
+<script type="text/javascript" src="httprpc.js"></script>
+<script type="text/javascript">
+function registerName() {
+    var name = document.querySelector("#name").value;
+    name = web3.fromAscii(name);
+
+    var eth = web3.eth;
+    eth.transact({to: "NameReg", gas: "10000", gasPrice: eth.gasPrice, data: [web3.fromAscii("register"), name]}).then(function(tx) {
+        document.querySelector("#result").innerHTML = "Registered name. Please wait for the next block to come through.";
+    }, function(err) {
+        console.log(err); 
+    });
+}
+</script>
+</head>
+
+<body>
+
+<h1>std::name_reg</h1>
+<input type="text" id="name"></input>
+<input type="submit" onClick="registerName();"></input>
+<div id="result"></div>
+
+</body>
+
+</html>
diff --git a/cmd/mist/assets/ext/eth.js/main.js b/cmd/mist/assets/ext/eth.js/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c7ca0603462b09ae321ae02e2567c77e56afcce
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/main.js
@@ -0,0 +1,432 @@
+(function(window) {
+    function isPromise(o) {
+        return o instanceof Promise
+    }
+
+    function flattenPromise (obj) {
+        if (obj instanceof Promise) {
+            return Promise.resolve(obj);
+        }
+
+        if (obj instanceof Array) {
+            return new Promise(function (resolve) {
+                var promises = obj.map(function (o) {
+                    return flattenPromise(o);
+                });
+
+                return Promise.all(promises).then(function (res) {
+                    for (var i = 0; i < obj.length; i++) {
+                        obj[i] = res[i];
+                    }
+                    resolve(obj);
+                });
+            });
+        }
+        
+        if (obj instanceof Object) {
+            return new Promise(function (resolve) {
+                var keys = Object.keys(obj);
+                var promises = keys.map(function (key) {
+                    return flattenPromise(obj[key]);
+                });
+
+                return Promise.all(promises).then(function (res) {
+                    for (var i = 0; i < keys.length; i++) {
+                        obj[keys[i]] = res[i];
+                    }
+                    resolve(obj);
+                });
+            });
+        }
+
+        return Promise.resolve(obj);
+    };
+
+    var ethMethods = function () {
+        var blockCall = function (args) {
+            return typeof args[0] === "string" ? "blockByHash" : "blockByNumber";
+        };
+
+        var transactionCall = function (args) {
+            return typeof args[0] === "string" ? 'transactionByHash' : 'transactionByNumber';   
+        };
+
+        var uncleCall = function (args) {
+            return typeof args[0] === "string" ? 'uncleByHash' : 'uncleByNumber';       
+        };
+
+        var methods = [
+        { name: 'balanceAt', call: 'balanceAt' },
+        { name: 'stateAt', call: 'stateAt' },
+        { name: 'countAt', call: 'countAt'},
+        { name: 'codeAt', call: 'codeAt' },
+        { name: 'transact', call: 'transact' },
+        { name: 'call', call: 'call' },
+        { name: 'block', call: blockCall },
+        { name: 'transaction', call: transactionCall },
+        { name: 'uncle', call: uncleCall },
+        { name: 'compile', call: 'compile' }
+        ];
+        return methods;
+    };
+
+    var ethProperties = function () {
+        return [
+        { name: 'coinbase', getter: 'coinbase', setter: 'setCoinbase' },
+        { name: 'listening', getter: 'listening', setter: 'setListening' },
+        { name: 'mining', getter: 'mining', setter: 'setMining' },
+        { name: 'gasPrice', getter: 'gasPrice' },
+        { name: 'account', getter: 'account' },
+        { name: 'accounts', getter: 'accounts' },
+        { name: 'peerCount', getter: 'peerCount' },
+        { name: 'defaultBlock', getter: 'defaultBlock', setter: 'setDefaultBlock' },
+        { name: 'number', getter: 'number'}
+        ];
+    };
+
+    var dbMethods = function () {
+        return [
+        { name: 'put', call: 'put' },
+        { name: 'get', call: 'get' },
+        { name: 'putString', call: 'putString' },
+        { name: 'getString', call: 'getString' }
+        ];
+    };
+
+    var shhMethods = function () {
+        return [
+        { name: 'post', call: 'post' },
+        { name: 'newIdentity', call: 'newIdentity' },
+        { name: 'haveIdentity', call: 'haveIdentity' },
+        { name: 'newGroup', call: 'newGroup' },
+        { name: 'addToGroup', call: 'addToGroup' }
+        ];
+    };
+
+    var ethWatchMethods = function () {
+        var newFilter = function (args) {
+            return typeof args[0] === 'string' ? 'newFilterString' : 'newFilter';
+        };
+
+        return [
+        { name: 'newFilter', call: newFilter },
+        { name: 'uninstallFilter', call: 'uninstallFilter' },
+        { name: 'getMessages', call: 'getMessages' }
+        ];
+    };
+
+    var shhWatchMethods = function () {
+        return [
+        { name: 'newFilter', call: 'shhNewFilter' },
+        { name: 'uninstallFilter', call: 'shhUninstallFilter' },
+        { name: 'getMessage', call: 'shhGetMessages' }
+        ];
+    };
+
+    var setupMethods = function (obj, methods) {
+        methods.forEach(function (method) {
+            obj[method.name] = function () {
+                return flattenPromise(Array.prototype.slice.call(arguments)).then(function (args) {
+                    var call = typeof method.call === "function" ? method.call(args) : method.call; 
+                    return {call: call, args: args};
+                }).then(function (request) {
+                    return new Promise(function (resolve, reject) {
+                        web3.provider.send(request, function (result) {
+                            //if (result || typeof result === "boolean") {
+                                resolve(result);
+                                return;
+                            //} 
+                            //reject(result);
+                        });
+                    });
+                }).catch(function( err) {
+                    console.error(err);
+                });
+            };
+        });
+    };
+
+    var setupProperties = function (obj, properties) {
+        properties.forEach(function (property) {
+            var proto = {};
+            proto.get = function () {
+                return new Promise(function(resolve, reject) {
+                    web3.provider.send({call: property.getter}, function(result) {
+                        resolve(result);
+                    });
+                });
+            };
+            if (property.setter) {
+                proto.set = function (val) {
+                    return flattenPromise([val]).then(function (args) {
+                        return new Promise(function (resolve) {
+                            web3.provider.send({call: property.setter, args: args}, function (result) {
+                                resolve(result);
+                            });
+                        });
+                    }).catch(function (err) {
+                        console.error(err);
+                    });
+                }
+            }
+            Object.defineProperty(obj, property.name, proto);
+        });
+    };
+    
+    var web3 = {
+        _callbacks: {},
+        _events: {},
+        providers: {},
+        toHex: function(str) {
+            var hex = "";
+            for(var i = 0; i < str.length; i++) {
+                var n = str.charCodeAt(i).toString(16);
+                hex += n.length < 2 ? '0' + n : n;
+            }
+
+            return hex;
+        },
+
+        toAscii: function(hex) {
+            // Find termination
+            var str = "";
+            var i = 0, l = hex.length;
+            for(; i < l; i+=2) {
+                var code = hex.charCodeAt(i)
+                if(code == 0) {
+                    break;
+                }
+
+                str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
+            }
+
+            return str;
+        },
+
+        toDecimal: function (val) {
+            return parseInt(val, 16);         
+        },
+
+        fromAscii: function(str, pad) {
+            pad = pad === undefined ? 32 : pad;
+            var hex = this.toHex(str);
+            while(hex.length < pad*2)
+                hex += "00";
+            return hex
+        },
+
+        eth: {
+            prototype: Object(),
+            watch: function (params) {
+                return new Filter(params, ethWatch);
+            },
+        },
+
+        db: {
+            prototype: Object()
+        },
+
+        shh: {
+            prototype: Object(),
+            watch: function (params) {
+                return new Filter(params, shhWatch);
+            }
+        },
+
+        on: function(event, id, cb) {
+            if(web3._events[event] === undefined) {
+                web3._events[event] = {};
+            }
+
+            web3._events[event][id] = cb;
+            return this
+        },
+
+        off: function(event, id) {
+            if(web3._events[event] !== undefined) {
+                delete web3._events[event][id];
+            }
+
+            return this
+        },
+
+        trigger: function(event, id, data) {
+            var callbacks = web3._events[event];
+            if (!callbacks || !callbacks[id]) {
+                return;
+            }
+            var cb = callbacks[id];
+            cb(data);
+        },
+    };
+
+    var eth = web3.eth;
+    setupMethods(eth, ethMethods());
+    setupProperties(eth, ethProperties());
+    setupMethods(web3.db, dbMethods());
+    setupMethods(web3.shh, shhMethods());
+
+    var ethWatch = {
+        changed: 'changed'
+    };
+    setupMethods(ethWatch, ethWatchMethods());
+    var shhWatch = {
+        changed: 'shhChanged'
+    };
+    setupMethods(shhWatch, shhWatchMethods());
+
+    var ProviderManager = function() {
+        this.queued = [];
+        this.polls = [];
+        this.ready = false;
+        this.provider = undefined;
+        this.id = 1;
+
+        var self = this;
+        var poll = function () {
+            if (self.provider && self.provider.poll) {
+                self.polls.forEach(function (data) {
+                    data.data._id = self.id; 
+                    self.id++;
+                    self.provider.poll(data.data, data.id);
+                });
+            }
+            setTimeout(poll, 12000);
+        };
+        poll();
+    };
+
+    ProviderManager.prototype.send = function(data, cb) {
+        data._id = this.id;
+        if (cb) {
+            web3._callbacks[data._id] = cb;
+        }
+
+        data.args = data.args || [];
+        this.id++;
+
+        if(this.provider !== undefined) {
+            this.provider.send(data);
+        } else {
+            console.warn("provider is not set");
+            this.queued.push(data);
+        }
+    };
+
+    ProviderManager.prototype.set = function(provider) {
+        if(this.provider !== undefined && this.provider.unload !== undefined) {
+            this.provider.unload();
+        }
+
+        this.provider = provider;
+        this.ready = true;
+    };
+
+    ProviderManager.prototype.sendQueued = function() {
+        for(var i = 0; this.queued.length; i++) {
+            // Resend
+            this.send(this.queued[i]);
+        }
+    };
+
+    ProviderManager.prototype.installed = function() {
+        return this.provider !== undefined;
+    };
+
+    ProviderManager.prototype.startPolling = function (data, pollId) {
+        if (!this.provider || !this.provider.poll) {
+            return;
+        }
+        this.polls.push({data: data, id: pollId});
+    };
+
+    ProviderManager.prototype.stopPolling = function (pollId) {
+        for (var i = this.polls.length; i--;) {
+            var poll = this.polls[i];
+            if (poll.id === pollId) {
+                this.polls.splice(i, 1);
+            }
+        }
+    };
+
+    web3.provider = new ProviderManager();
+
+    web3.setProvider = function(provider) {
+        provider.onmessage = messageHandler;
+        web3.provider.set(provider);
+        web3.provider.sendQueued();
+    };
+
+    var Filter = function(options, impl) {
+        this.impl = impl;
+        this.callbacks = [];
+
+        var self = this; 
+        this.promise = impl.newFilter(options); 
+        this.promise.then(function (id) {
+            self.id = id;
+            web3.on(impl.changed, id, self.trigger.bind(self));
+            web3.provider.startPolling({call: impl.changed, args: [id]}, id);
+        });
+    };
+
+    Filter.prototype.arrived = function(callback) {
+        this.changed(callback);
+    }
+
+    Filter.prototype.changed = function(callback) {
+        var self = this;
+        this.promise.then(function(id) {
+            self.callbacks.push(callback);
+        });
+    };
+
+    Filter.prototype.trigger = function(messages) {
+        for(var i = 0; i < this.callbacks.length; i++) {
+            this.callbacks[i].call(this, messages);
+        }
+    };
+
+    Filter.prototype.uninstall = function() {
+        var self = this;
+        this.promise.then(function (id) {
+            self.impl.uninstallFilter(id);
+            web3.provider.stopPolling(id);
+            web3.off(impl.changed, id);
+        });
+    };
+
+    Filter.prototype.messages = function() {
+        var self = this;    
+        return this.promise.then(function (id) {
+            return self.impl.getMessages(id);
+        });
+    };
+
+    function messageHandler(data) {
+        if(data._event !== undefined) {
+            web3.trigger(data._event, data._id, data.data);
+            return;
+        }
+        
+        if(data._id) {
+            var cb = web3._callbacks[data._id];
+            if (cb) {
+                cb.call(this, data.data)
+                delete web3._callbacks[data._id];
+            }
+        }
+    }
+
+    /*
+    // Install default provider
+    if(!web3.provider.installed()) {
+        var sock = new web3.WebSocket("ws://localhost:40404/eth");
+
+        web3.setProvider(sock);
+    }
+    */
+
+    window.web3 = web3;
+
+})(this);
diff --git a/cmd/mist/assets/ext/eth.js/qt.js b/cmd/mist/assets/ext/eth.js/qt.js
new file mode 100644
index 0000000000000000000000000000000000000000..644c3773784bcf1add5ee034dfe5184520dcfe4f
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/qt.js
@@ -0,0 +1,27 @@
+(function() {
+    var QtProvider = function() {
+        this.handlers = [];
+        
+        var self = this;
+        navigator.qt.onmessage = function (message) {
+            self.handlers.forEach(function (handler) {
+                handler.call(self, JSON.parse(message.data));
+            });
+        }
+    };
+
+    QtProvider.prototype.send = function(payload) {
+        navigator.qt.postMessage(JSON.stringify(payload));
+    };
+
+    Object.defineProperty(QtProvider.prototype, "onmessage", {
+        set: function(handler) {
+            this.handlers.push(handler);
+        },
+    }); 
+
+    if(typeof(web3) !== "undefined" && web3.providers !== undefined) {
+        web3.providers.QtProvider = QtProvider;
+    }
+})();
+
diff --git a/cmd/mist/assets/ext/eth.js/websocket.js b/cmd/mist/assets/ext/eth.js/websocket.js
new file mode 100644
index 0000000000000000000000000000000000000000..732a086f294ac7def12c28f44262a8777cdfa32a
--- /dev/null
+++ b/cmd/mist/assets/ext/eth.js/websocket.js
@@ -0,0 +1,51 @@
+(function() {
+    var WebSocketProvider = function(host) {
+        // onmessage handlers
+        this.handlers = [];
+        // queue will be filled with messages if send is invoked before the ws is ready
+        this.queued = [];
+        this.ready = false;
+
+        this.ws = new WebSocket(host);
+
+        var self = this;
+        this.ws.onmessage = function(event) {
+            for(var i = 0; i < self.handlers.length; i++) {
+                self.handlers[i].call(self, JSON.parse(event.data), event)
+            }
+        };
+
+        this.ws.onopen = function() {
+            self.ready = true;
+
+            for(var i = 0; i < self.queued.length; i++) {
+                // Resend
+                self.send(self.queued[i]);
+            }
+        };
+    };
+    WebSocketProvider.prototype.send = function(payload) {
+        if(this.ready) {
+            var data = JSON.stringify(payload);
+
+            this.ws.send(data);
+        } else {
+            this.queued.push(payload);
+        }
+    };
+
+    WebSocketProvider.prototype.onMessage = function(handler) {
+        this.handlers.push(handler);
+    };
+
+    WebSocketProvider.prototype.unload = function() {
+        this.ws.close();
+    };
+    Object.defineProperty(WebSocketProvider.prototype, "onmessage", {
+        set: function(provider) { this.onMessage(provider); }
+    });
+
+    if(typeof(web3) !== "undefined" && web3.providers !== undefined) {
+        web3.providers.WebSocketProvider = WebSocketProvider;
+    }
+})();
diff --git a/mist/assets/ext/ethereum.js b/cmd/mist/assets/ext/ethereum.js
similarity index 89%
rename from mist/assets/ext/ethereum.js
rename to cmd/mist/assets/ext/ethereum.js
index 697a404a3472789d351ddc62d34a442c9a5e6be3..aeb79e488dff5bc4ca6cb7c8925512622cbdaa43 100644
--- a/mist/assets/ext/ethereum.js
+++ b/cmd/mist/assets/ext/ethereum.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 // Main Ethereum library
 window.eth = {
 	prototype: Object(),
diff --git a/mist/assets/ext/filter.js b/cmd/mist/assets/ext/filter.js
similarity index 56%
rename from mist/assets/ext/filter.js
rename to cmd/mist/assets/ext/filter.js
index c237062496650147ad54f12736856df5c588c1ab..f8529c54b4ecf4983703eb2ce4e08d9bd903ca52 100644
--- a/mist/assets/ext/filter.js
+++ b/cmd/mist/assets/ext/filter.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 var ethx = {
     prototype: Object,
 
diff --git a/mist/assets/ext/home.html b/cmd/mist/assets/ext/home.html
similarity index 100%
rename from mist/assets/ext/home.html
rename to cmd/mist/assets/ext/home.html
diff --git a/mist/assets/ext/html_messaging.js b/cmd/mist/assets/ext/html_messaging.js
similarity index 93%
rename from mist/assets/ext/html_messaging.js
rename to cmd/mist/assets/ext/html_messaging.js
index 91310e998eceb7e51123b42141703aa6f6a5f25c..f58eb7c2974a516eeb32dc5b9410f9b4d11f7276 100644
--- a/mist/assets/ext/html_messaging.js
+++ b/cmd/mist/assets/ext/html_messaging.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 // The magic return variable. The magic return variable will be set during the execution of the QML call.
 (function(window) {
 	var Promise = window.Promise;
diff --git a/cmd/mist/assets/ext/http.js b/cmd/mist/assets/ext/http.js
new file mode 100644
index 0000000000000000000000000000000000000000..81908266f107f9b5c2f0783167ed4b460139dfa7
--- /dev/null
+++ b/cmd/mist/assets/ext/http.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+// this function is included locally, but you can also include separately via a header definition
+function request(url, callback) {
+	var xhr = new XMLHttpRequest();
+	xhr.onreadystatechange = (function(req) {
+		return function() {
+			if(req.readyState === 4) {
+				callback(req);
+			}
+		}
+	})(xhr);
+	xhr.open('GET', url, true);
+	xhr.send('');
+}
diff --git a/mist/assets/ext/q.js b/cmd/mist/assets/ext/q.js
similarity index 100%
rename from mist/assets/ext/q.js
rename to cmd/mist/assets/ext/q.js
diff --git a/cmd/mist/assets/ext/qml_messaging.js b/cmd/mist/assets/ext/qml_messaging.js
new file mode 100644
index 0000000000000000000000000000000000000000..031c5efd1ae65f179532becc1b898245702a6005
--- /dev/null
+++ b/cmd/mist/assets/ext/qml_messaging.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+function HandleMessage(data) {
+	var message;
+	try { message = JSON.parse(data) } catch(e) {};
+
+	if(message) {
+		switch(message.type) {
+			case "coinbase":
+				return eth.coinBase();
+			case "block":
+				return eth.blockByNumber(0);
+		}
+	}
+}
diff --git a/cmd/mist/assets/ext/qt_messaging_adapter.js b/cmd/mist/assets/ext/qt_messaging_adapter.js
new file mode 100644
index 0000000000000000000000000000000000000000..04f8e034a906999250b2f18d98a49bd710c39709
--- /dev/null
+++ b/cmd/mist/assets/ext/qt_messaging_adapter.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+window._messagingAdapter = function(data) {
+	navigator.qt.postMessage(data);
+};
+
+navigator.qt.onmessage = function(ev) {
+	var data = JSON.parse(ev.data)
+
+	if(data._event !== undefined) {
+		eth.trigger(data._event, data.data);
+	} else {
+		if(data._seed) {
+			var cb = eth._callbacks[data._seed];
+			if(cb) {
+				cb.call(this, data.data)
+
+				// Remove the "trigger" callback
+				delete eth._callbacks[ev._seed];
+			}
+		}
+	}
+}
diff --git a/cmd/mist/assets/ext/setup.js b/cmd/mist/assets/ext/setup.js
new file mode 100644
index 0000000000000000000000000000000000000000..8317937b3a05e06a9a1d6e74a27c4f005650fc19
--- /dev/null
+++ b/cmd/mist/assets/ext/setup.js
@@ -0,0 +1,8 @@
+(function() {
+    if (typeof(Promise) === "undefined")
+        window.Promise = Q.Promise;
+
+    var eth = web3.eth;
+
+    web3.setProvider(new web3.providers.QtProvider());
+})()
diff --git a/mist/assets/ext/string.js b/cmd/mist/assets/ext/string.js
similarity index 62%
rename from mist/assets/ext/string.js
rename to cmd/mist/assets/ext/string.js
index 2473b5c36b061df79d47dc164244f1033280fe57..e8dbd14d41c0b9da09f7ffd851a6fed513e2a4b5 100644
--- a/mist/assets/ext/string.js
+++ b/cmd/mist/assets/ext/string.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 String.prototype.pad = function(l, r) {
 	if (r === undefined) {
 		r = l
diff --git a/mist/assets/ext/test.html b/cmd/mist/assets/ext/test.html
similarity index 100%
rename from mist/assets/ext/test.html
rename to cmd/mist/assets/ext/test.html
diff --git a/mist/assets/facet.png b/cmd/mist/assets/facet.png
similarity index 100%
rename from mist/assets/facet.png
rename to cmd/mist/assets/facet.png
diff --git a/mist/assets/heart.png b/cmd/mist/assets/heart.png
similarity index 100%
rename from mist/assets/heart.png
rename to cmd/mist/assets/heart.png
diff --git a/mist/assets/icecream.png b/cmd/mist/assets/icecream.png
similarity index 100%
rename from mist/assets/icecream.png
rename to cmd/mist/assets/icecream.png
diff --git a/cmd/mist/assets/miner.png b/cmd/mist/assets/miner.png
new file mode 100644
index 0000000000000000000000000000000000000000..58e3f4dfee4a6cf043c9a2b0bfce9b0a5f0f7424
Binary files /dev/null and b/cmd/mist/assets/miner.png differ
diff --git a/mist/assets/muted/codemirror.css b/cmd/mist/assets/muted/codemirror.css
similarity index 100%
rename from mist/assets/muted/codemirror.css
rename to cmd/mist/assets/muted/codemirror.css
diff --git a/mist/assets/muted/debugger.html b/cmd/mist/assets/muted/debugger.html
similarity index 100%
rename from mist/assets/muted/debugger.html
rename to cmd/mist/assets/muted/debugger.html
diff --git a/mist/assets/muted/eclipse.css b/cmd/mist/assets/muted/eclipse.css
similarity index 100%
rename from mist/assets/muted/eclipse.css
rename to cmd/mist/assets/muted/eclipse.css
diff --git a/mist/assets/muted/index.html b/cmd/mist/assets/muted/index.html
similarity index 100%
rename from mist/assets/muted/index.html
rename to cmd/mist/assets/muted/index.html
diff --git a/mist/assets/muted/lib/codemirror.js b/cmd/mist/assets/muted/lib/codemirror.js
similarity index 100%
rename from mist/assets/muted/lib/codemirror.js
rename to cmd/mist/assets/muted/lib/codemirror.js
diff --git a/mist/assets/muted/lib/go.js b/cmd/mist/assets/muted/lib/go.js
similarity index 100%
rename from mist/assets/muted/lib/go.js
rename to cmd/mist/assets/muted/lib/go.js
diff --git a/mist/assets/muted/lib/matchbrackets.js b/cmd/mist/assets/muted/lib/matchbrackets.js
similarity index 100%
rename from mist/assets/muted/lib/matchbrackets.js
rename to cmd/mist/assets/muted/lib/matchbrackets.js
diff --git a/mist/assets/muted/muted.js b/cmd/mist/assets/muted/muted.js
similarity index 62%
rename from mist/assets/muted/muted.js
rename to cmd/mist/assets/muted/muted.js
index 72e858d7ae29f57f87300f5aa9317131a06a545b..4674115775f347c6abbf958d0a4b5a7389ead5cc 100644
--- a/mist/assets/muted/muted.js
+++ b/cmd/mist/assets/muted/muted.js
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 // Helper function for generating pseudo callbacks and sending data to the QML part of the application
 function postData(data, cb) {
 	data._seed = Math.floor(Math.random() * 1000000)
diff --git a/mist/assets/net.png b/cmd/mist/assets/net.png
similarity index 100%
rename from mist/assets/net.png
rename to cmd/mist/assets/net.png
diff --git a/mist/assets/network.png b/cmd/mist/assets/network.png
similarity index 100%
rename from mist/assets/network.png
rename to cmd/mist/assets/network.png
diff --git a/mist/assets/new.png b/cmd/mist/assets/new.png
similarity index 100%
rename from mist/assets/new.png
rename to cmd/mist/assets/new.png
diff --git a/mist/assets/pick.png b/cmd/mist/assets/pick.png
similarity index 100%
rename from mist/assets/pick.png
rename to cmd/mist/assets/pick.png
diff --git a/mist/assets/qml/QmlApp.qml b/cmd/mist/assets/qml/QmlApp.qml
similarity index 100%
rename from mist/assets/qml/QmlApp.qml
rename to cmd/mist/assets/qml/QmlApp.qml
diff --git a/mist/assets/qml/first_run.qml b/cmd/mist/assets/qml/first_run.qml
similarity index 100%
rename from mist/assets/qml/first_run.qml
rename to cmd/mist/assets/qml/first_run.qml
diff --git a/mist/assets/qml/main.qml b/cmd/mist/assets/qml/main.qml
similarity index 94%
rename from mist/assets/qml/main.qml
rename to cmd/mist/assets/qml/main.qml
index 3d9204ce871246ae16536e025b4c6f36b5575917..a08a8b4efa27b9717839956d9372607b5d041c84 100644
--- a/mist/assets/qml/main.qml
+++ b/cmd/mist/assets/qml/main.qml
@@ -12,7 +12,6 @@ import "../ext/http.js" as Http
 ApplicationWindow {
 	id: root
 
-	property alias miningButtonText: miningButton.text
 	property var ethx : Eth.ethx
 	property var browser
 
@@ -48,12 +47,12 @@ ApplicationWindow {
 		var wallet = addPlugin("./views/wallet.qml", {noAdd: true, close: false, section: "ethereum", active: true});
 		var browser = addPlugin("./webapp.qml", {noAdd: true, close: false, section: "ethereum", active: true});
 		root.browser = browser;
+		addPlugin("./views/miner.qml", {noAdd: true, close: false, section: "ethereum", active: true});
 
 		addPlugin("./views/transaction.qml", {noAdd: true, close: false, section: "legacy"});
 		addPlugin("./views/chain.qml", {noAdd: true, close: false, section: "legacy"});
-		addPlugin("./views/info.qml", {noAdd: true, close: false, section: "legacy"});
 		addPlugin("./views/pending_tx.qml", {noAdd: true, close: false, section: "legacy"});
-		addPlugin("./views/javascript.qml", {noAdd: true, close: false, section: "legacy"});
+		addPlugin("./views/info.qml", {noAdd: true, close: false, section: "legacy"});
 
 		addPlugin("./views/jeffcoin/jeffcoin.qml", {noAdd: true, close: false, section: "apps"})
 
@@ -253,29 +252,18 @@ ApplicationWindow {
 	}
 
 	statusBar: StatusBar {
-		height: 32
+		//height: 32
 		id: statusBar
-		RowLayout {
-			Button {
-				id: miningButton
-				text: "Start Mining"
-				onClicked: {
-					gui.toggleMining()
-				}
-			}
-
-			RowLayout {
-				Label {
-					id: walletValueLabel
+		Label {
+			//y: 6
+			id: walletValueLabel
 
-					font.pixelSize: 10
-					styleColor: "#797979"
-				}
-			}
+			font.pixelSize: 10
+			styleColor: "#797979"
 		}
 
 		Label {
-			y: 6
+			//y: 6
 			objectName: "miningLabel"
 			visible: true
 			font.pixelSize: 10
@@ -284,7 +272,7 @@ ApplicationWindow {
 		}
 
 		Label {
-			y: 6
+			//y: 6
 			id: lastBlockLabel
 			objectName: "lastBlockLabel"
 			visible: true
@@ -298,14 +286,14 @@ ApplicationWindow {
 			id: downloadIndicator
 			value: 0
 			objectName: "downloadIndicator"
-			y: 3
+			y: -4
 			x: statusBar.width / 2 - this.width / 2
 			width: 160
 		}
 
 		Label {
 			objectName: "downloadLabel"
-			y: 7
+			//y: 7
 			anchors.left: downloadIndicator.right
 			anchors.leftMargin: 5
 			font.pixelSize: 10
@@ -315,7 +303,7 @@ ApplicationWindow {
 
 		RowLayout {
 			id: peerGroup
-			y: 7
+			//y: 7
 			anchors.right: parent.right
 			MouseArea {
 				onDoubleClicked:  peerWindow.visible = true
@@ -324,14 +312,9 @@ ApplicationWindow {
 
 			Label {
 				id: peerLabel
-				font.pixelSize: 8
+				font.pixelSize: 10
 				text: "0 / 0"
 			}
-			Image {
-				id: peerImage
-				width: 10; height: 10
-				source: "../network.png"
-			}
 		}
 	}
 
@@ -363,12 +346,7 @@ ApplicationWindow {
 			view.visible = false
 			view.anchors.fill = mainView
 
-			if( !view.hasOwnProperty("iconSource") ) {
-				console.log("Could not load plugin. Property 'iconSourc' not found on view.");
-				return;
-			}
-
-			var menuItem = menu.createMenuItem(view.iconSource, view, options);
+			var menuItem = menu.createMenuItem(view, options);
 			if( view.hasOwnProperty("menuItem") ) {
 				view.menuItem = menuItem;
 			}
@@ -525,7 +503,7 @@ ApplicationWindow {
 				 }
 			 }
 
-			 function createMenuItem(icon, view, options) {
+			 function createMenuItem(view, options) {
 				 if(options === undefined) {
 					 options = {};
 				 }
@@ -547,7 +525,10 @@ ApplicationWindow {
 
 				 comp.view = view
 				 comp.title = view.title
-				 comp.icon = view.iconSource
+
+				 if(view.hasOwnProperty("iconSource")) {
+					 comp.icon = view.iconSource;
+				 }
 				 comp.closable = options.close;
 
 				 return comp
@@ -805,8 +786,8 @@ ApplicationWindow {
 		     title: "About"
 		     minimumWidth: 350
 		     maximumWidth: 350
-		     maximumHeight: 200
-		     minimumHeight: 200
+		     maximumHeight: 280
+		     minimumHeight: 280
 
 		     Image {
 			     id: aboutIcon
@@ -816,7 +797,7 @@ ApplicationWindow {
 			     smooth: true
 			     source: "../facet.png"
 			     x: 10
-			     y: 10
+			     y: 30
 		     }
 
 		     Text {
@@ -825,7 +806,7 @@ ApplicationWindow {
 			     anchors.top: parent.top
 			     anchors.topMargin: 30
 			     font.pointSize: 12
-			     text: "<h2>Mist (0.6.5)</h2><h4>Amalthea</h4><br><h3>Development</h3>Jeffrey Wilcke<br>Viktor Trón<br><h3>Building</h3>Maran Hidskes"
+			     text: "<h2>Mist (0.7.10)</h2><br><h3>Development</h3>Jeffrey Wilcke<br>Viktor Trón<br>Felix Lange<br>Taylor Gerring<br>Daniel Nagy<br><h3>UX</h3>Alex van de Sande<br>"
 		     }
 	     }
 
@@ -889,7 +870,7 @@ ApplicationWindow {
 					     pastPeers.append({text: ips.get(i)})
 				     }
 
-				     pastPeers.insert(0, {text: "poc-6.ethdev.com:30303"})
+				     pastPeers.insert(0, {text: "poc-7.ethdev.com:30303"})
 			     }
 		     }
 
diff --git a/mist/assets/qml/muted.qml b/cmd/mist/assets/qml/muted.qml
similarity index 100%
rename from mist/assets/qml/muted.qml
rename to cmd/mist/assets/qml/muted.qml
diff --git a/mist/assets/qml/test_app.qml b/cmd/mist/assets/qml/test_app.qml
similarity index 100%
rename from mist/assets/qml/test_app.qml
rename to cmd/mist/assets/qml/test_app.qml
diff --git a/mist/assets/qml/transactions.qml b/cmd/mist/assets/qml/transactions.qml
similarity index 100%
rename from mist/assets/qml/transactions.qml
rename to cmd/mist/assets/qml/transactions.qml
diff --git a/mist/assets/qml/views/chain.qml b/cmd/mist/assets/qml/views/chain.qml
similarity index 76%
rename from mist/assets/qml/views/chain.qml
rename to cmd/mist/assets/qml/views/chain.qml
index 130ff8bb978febd8a268a142d6be512b888021ce..6baf757a5855a28c729b5c349bec3704c7f0f22e 100644
--- a/mist/assets/qml/views/chain.qml
+++ b/cmd/mist/assets/qml/views/chain.qml
@@ -8,8 +8,7 @@ import Ethereum 1.0
 
 Rectangle {
 	id: root
-	property var title: "Network"
-	property var iconSource: "../net.png"
+	property var title: "Block Chain"
 	property var menuItem
 
 	objectName: "chainView"
@@ -64,12 +63,12 @@ Rectangle {
 
 		Menu {
 			id: contextMenu
-			property var row;
+			property var row
 			MenuItem {
 				text: "Details"
 				onTriggered: {
 					popup.visible = true
-					popup.setDetails(blockModel.get(this.row))
+					popup.setDetails(blockModel.get(contextMenu.row))
 				}
 			}
 
@@ -78,7 +77,7 @@ Rectangle {
 			MenuItem {
 				text: "Copy"
 				onTriggered: {
-					copyToClipboard(blockModel.get(this.row).hash)
+					copyToClipboard(blockModel.get(contextMenu.row).hash)
 				}
 			}
 
@@ -86,7 +85,7 @@ Rectangle {
 				text: "Dump State"
 				onTriggered: {
 					generalFileDialog.show(false, function(path) {
-						var hash = blockModel.get(this.row).hash;
+						var hash = blockModel.get(contextMenu.row).hash;
 
 						gui.dumpState(hash, path);
 					});
@@ -102,22 +101,18 @@ Rectangle {
 			initial = false
 		}
 
-		/*
-		var txs = JSON.parse(block.transactions);
-		if(txs != null){
-			amount = txs.length
-		}
-		*/
-	       var txs = block.transactions;
 	       var amount = block.transactions.length;
+	       var txs = [];
+	       for(var i = 0; i < block.transactions.length; i++) {
+		       var tx = JSON.parse(block.transactions.getAsJson(i));
+		       txs.push(tx);
+	       }
 
 		if(initial){
-			blockModel.append({size: block.size, number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
+			blockModel.append({raw: block.raw, bloom: block.bloom, size: block.size, number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
 		} else {
-			blockModel.insert(0, {size: block.size, number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
+			blockModel.insert(0, {bloom: block.bloom, size: block.size, number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
 		}
-
-		//root.secondary.text = "#" + block.number;
 	}
 
 	Window {
@@ -141,6 +136,7 @@ Rectangle {
 					Text { text: '<h3>Block details</h3>'; color: "#F2F2F2"}
 					Text { text: '<b>Block number:</b> ' + number + " (Size: " + size + ")"; color: "#F2F2F2"}
 					Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"}
+					Text { text: '<b>Bloom:</b> ' + bloom; color: "#F2F2F2"}
 					Text { text: '<b>Coinbase:</b> <' + name + '> ' + coinbase; color: "#F2F2F2"}
 					Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"}
 					Text { text: '<b>Gas used:</b> ' + gasUsed + " / " + gasLimit; color: "#F2F2F2"}
@@ -215,7 +211,7 @@ Rectangle {
 				anchors.topMargin: 10
 				text: "Debug contract"
 				onClicked: {
-					if(tx.createsContract){
+					if(tx && tx.createsContract){
 						eth.startDbWithCode(tx.rawData)
 					}else {
 						eth.startDbWithContractAndData(tx.address, tx.rawData)
@@ -227,11 +223,17 @@ Rectangle {
 				text: "Contract"
 				anchors.top: contractLabel.bottom
 				anchors.left: parent.left
-				anchors.bottom: popup.bottom
+				anchors.right: parent.right
 				wrapMode: Text.Wrap
-				width: parent.width - 30
 				height: 80
-				anchors.leftMargin: 10
+			}
+			TextArea {
+				id: dumpData
+				anchors.top: contractData.bottom
+				anchors.left: parent.left
+				anchors.right: parent.right
+				anchors.bottom: parent.bottom
+				height: 300
 			}
 		}
 		property var transactionModel: ListModel {
@@ -240,19 +242,20 @@ Rectangle {
 		property var singleBlock: ListModel {
 			id: singleBlock
 		}
-		function setDetails(block){
-			singleBlock.set(0,block)
+		function setDetails(bl){
+			singleBlock.set(0, bl)
 			popup.height = 300
 			transactionModel.clear()
-			if(block.txs !== undefined){
-				for(var i = 0; i < block.txs.length; i++) {
-					transactionModel.insert(0, block.txs.get(i))
+			if(bl.txs !== undefined){
+				for(var i = 0; i < bl.txs.count; i++) {
+					transactionModel.insert(0, bl.txs.get(i))
 				}
-				if(block.txs.length > 0 && block.txs.get(0).data){
-					popup.showContractData(block.txs.get(0))
+				if(bl.txs.count > 0 && bl.txs.get(0).data){
+					popup.showContractData(bl.txs.get(0))
 				}
 			}
 			txView.forceActiveFocus()
+			dumpData.text = bl.raw;
 		}
 	}
 }
diff --git a/mist/assets/qml/views/history.qml b/cmd/mist/assets/qml/views/history.qml
similarity index 96%
rename from mist/assets/qml/views/history.qml
rename to cmd/mist/assets/qml/views/history.qml
index 9eee883e3edd832704d4651bece73eaf499403b9..c72f8f3aee156d6f7d33164a541b14c6676446fa 100644
--- a/mist/assets/qml/views/history.qml
+++ b/cmd/mist/assets/qml/views/history.qml
@@ -7,7 +7,6 @@ import QtQuick.Controls.Styles 1.1
 import Ethereum 1.0
 
 Rectangle {
-	property var iconSource: "../tx.png"
 	property var title: "Transactions"
 	property var menuItem
 
diff --git a/mist/assets/qml/views/info.qml b/cmd/mist/assets/qml/views/info.qml
similarity index 97%
rename from mist/assets/qml/views/info.qml
rename to cmd/mist/assets/qml/views/info.qml
index 158e2c9609f1109d926a58a73f96438c6a69395f..3ff551b0584066594356e3e53c9613da95866c98 100644
--- a/mist/assets/qml/views/info.qml
+++ b/cmd/mist/assets/qml/views/info.qml
@@ -7,8 +7,7 @@ import QtQuick.Controls.Styles 1.1
 import Ethereum 1.0
 
 Rectangle {
-	property var title: "Information"
-	property var iconSource: "../heart.png"
+	property var title: "Debug Info"
 	property var menuItem
 
 	objectName: "infoView"
diff --git a/mist/assets/qml/views/jeffcoin/jeff.png b/cmd/mist/assets/qml/views/jeffcoin/jeff.png
similarity index 100%
rename from mist/assets/qml/views/jeffcoin/jeff.png
rename to cmd/mist/assets/qml/views/jeffcoin/jeff.png
diff --git a/mist/assets/qml/views/jeffcoin/jeffcoin.qml b/cmd/mist/assets/qml/views/jeffcoin/jeffcoin.qml
similarity index 100%
rename from mist/assets/qml/views/jeffcoin/jeffcoin.qml
rename to cmd/mist/assets/qml/views/jeffcoin/jeffcoin.qml
diff --git a/cmd/mist/assets/qml/views/miner.qml b/cmd/mist/assets/qml/views/miner.qml
new file mode 100644
index 0000000000000000000000000000000000000000..e0182649fb01b7eece5e95f75afe166056b47083
--- /dev/null
+++ b/cmd/mist/assets/qml/views/miner.qml
@@ -0,0 +1,254 @@
+import QtQuick 2.0
+import QtQuick.Controls 1.0;
+import QtQuick.Layouts 1.0;
+import QtQuick.Dialogs 1.0;
+import QtQuick.Window 2.1;
+import QtQuick.Controls.Styles 1.1
+import Ethereum 1.0
+
+Rectangle {
+	id: root
+	property var title: "Miner"
+	property var iconSource: "../miner.png"
+	property var menuItem
+
+	color: "#00000000"
+
+	ColumnLayout {
+		spacing: 10
+		anchors.fill: parent
+
+		Rectangle {
+			id: mainPane
+			color: "#00000000"
+			anchors {
+				top: parent.top
+				bottom: localTxPane.top
+				left: parent.left
+				right: parent.right
+			}
+
+			Rectangle {
+				id: menu
+				height: 25
+				anchors {
+					left: parent.left
+				}
+
+				RowLayout {
+					id: tools
+					anchors {
+						left: parent.left
+						right: parent.right
+					}
+
+					Button {
+						text: "Start"
+						onClicked: {
+							eth.setGasPrice(minGasPrice.text || "10000000000000");
+							if (eth.toggleMining()) {
+								this.text = "Stop";
+							} else {
+								this.text = "Start";
+							}
+						}
+					}
+
+					Rectangle {
+						anchors.top: parent.top
+						anchors.topMargin: 2
+						width: 200
+						TextField {
+							id: minGasPrice
+							placeholderText: "Min Gas: 10000000000000"
+							width: 200
+							validator: RegExpValidator { regExp: /\d*/ }
+						}
+					}
+				}
+			}
+
+			Column {
+				anchors {
+					left: parent.left
+					right: parent.right
+					top: menu.bottom
+					topMargin: 5
+				}
+
+				Text {
+					text: "<b>Merged mining options</b>"
+				}
+
+				TableView {
+					id: mergedMiningTable
+					height: 300
+					anchors {
+						left: parent.left
+						right: parent.right
+					}
+					Component {
+						id: checkBoxDelegate
+
+						Item {
+							id: test
+							CheckBox {
+								anchors.fill: parent
+								checked: styleData.value
+
+								onClicked: {
+									var model = mergedMiningModel.get(styleData.row)
+
+									if (this.checked) {
+										model.id = txModel.createLocalTx(model.address, "0", "5000", "0", "")
+									} else {
+										txModel.removeWithId(model.id);
+										model.id = 0;
+									}
+								}
+							}
+						}
+					}
+					TableViewColumn{ role: "checked" ; title: "" ; width: 40 ; delegate: checkBoxDelegate }
+					TableViewColumn{ role: "name" ; title: "Name" ; width: 480 }
+					model: ListModel {
+						objectName: "mergedMiningModel"
+						id: mergedMiningModel 
+						function addMergedMiningOption(model) {
+							this.append(model);
+						}
+					}
+					Component.onCompleted: {
+						/*
+						// XXX Temp. replace with above eventually
+						var tmpItems = ["JEVCoin", "Some coin", "Other coin", "Etc coin"];
+						var address = "e6716f9544a56c530d868e4bfbacb172315bdead";
+						for (var i = 0; i < tmpItems.length; i++) {
+							mergedMiningModel.append({checked: false, name: tmpItems[i], address: address, id: 0, itemId: i});
+						}
+						*/
+					}
+				}
+			}
+		}
+
+		Rectangle {
+			id: localTxPane
+			color: "#ececec"
+			border.color: "#cccccc"
+			border.width: 1
+			anchors {
+				left: parent.left
+				right: parent.right
+				bottom: parent.bottom
+			}
+			height: 300
+
+			ColumnLayout {
+				spacing: 10
+				anchors.fill: parent
+				RowLayout {
+					id: newLocalTx
+					anchors {
+						left: parent.left
+						leftMargin: 5
+						top: parent.top
+						topMargin: 5
+						bottomMargin: 5
+					}
+
+					Text {
+						text: "Local tx"
+					}
+
+					Rectangle {
+						width: 250
+						color: "#00000000"
+						anchors.top: parent.top
+						anchors.topMargin: 2
+
+						TextField {
+							id: to
+							placeholderText: "To"
+							width: 250
+							validator: RegExpValidator { regExp: /[abcdefABCDEF1234567890]*/ }
+						}
+					}
+					TextField {
+						property var defaultGas: "5000"
+						id: gas
+						placeholderText: "Gas"
+						text: defaultGas
+						validator: RegExpValidator { regExp: /\d*/ }
+					}
+					TextField {
+						id: gasPrice
+						placeholderText: "Price"
+						validator: RegExpValidator { regExp: /\d*/ }
+					}
+					TextField {
+						id: value 
+						placeholderText: "Amount"
+						text: "0"
+						validator: RegExpValidator { regExp: /\d*/ }
+					}
+					TextField {
+						id: data
+						placeholderText: "Data"
+						validator: RegExpValidator { regExp: /[abcdefABCDEF1234567890]*/ }
+					}
+					Button {
+						text: "Create"
+						onClicked: {
+							if (to.text.length == 40 && gasPrice.text.length != 0 && value.text.length != 0 && gas.text.length != 0) {
+								txModel.createLocalTx(to.text, gasPrice.text, gas.text, value.text, data.text);
+
+								to.text = ""; gasPrice.text = "";
+								gas.text = gas.defaultGas;
+								value.text = "0"
+							}
+						}
+					}
+				}
+
+				TableView {
+					id: txTableView
+					anchors {
+						top: newLocalTx.bottom
+						topMargin: 5
+						left: parent.left
+						right: parent.right
+						bottom: parent.bottom
+					}
+					TableViewColumn{ role: "to" ; title: "To" ; width: 480 }
+					TableViewColumn{ role: "gas" ; title: "Gas" ; width: 100 }
+					TableViewColumn{ role: "gasPrice" ; title: "Gas Price" ; width: 100 }
+					TableViewColumn{ role: "value" ; title: "Amount" ; width: 100 }
+					TableViewColumn{ role: "data" ; title: "Data" ; width: 100 }
+
+					model: ListModel {
+						id: txModel
+						Component.onCompleted: {
+						}
+						function removeWithId(id) {
+							for (var i = 0; i < this.count; i++) {
+								if (txModel.get(i).id == id) {
+									this.remove(i);
+									eth.removeLocalTransaction(id)
+									break;
+								}
+							}
+						}
+
+						function createLocalTx(to, gasPrice, gas, value, data) {
+							var id = eth.addLocalTransaction(to, data, gas, gasPrice, value)
+							txModel.insert(0, {to: to, gas: gas, gasPrice: gasPrice, value: value, data: data, id: id});
+
+							return id
+						}
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/mist/assets/qml/views/pending_tx.qml b/cmd/mist/assets/qml/views/pending_tx.qml
similarity index 96%
rename from mist/assets/qml/views/pending_tx.qml
rename to cmd/mist/assets/qml/views/pending_tx.qml
index abfa257907676c8d151020a3e15e61c961544c34..4442a69dbf4fdac66842223154df3c5d79b5472d 100644
--- a/mist/assets/qml/views/pending_tx.qml
+++ b/cmd/mist/assets/qml/views/pending_tx.qml
@@ -8,7 +8,6 @@ import Ethereum 1.0
 
 Rectangle {
 	property var title: "Pending Transactions"
-	property var iconSource: "../tx.png"
 	property var menuItem
 
 	objectName: "pendingTxView"
diff --git a/mist/assets/qml/views/transaction.qml b/cmd/mist/assets/qml/views/transaction.qml
similarity index 98%
rename from mist/assets/qml/views/transaction.qml
rename to cmd/mist/assets/qml/views/transaction.qml
index 7d689733fa321d61352708bf66e83c337f713556..62c7629569612e2684f15ffb8acaa7e21f2a6577 100644
--- a/mist/assets/qml/views/transaction.qml
+++ b/cmd/mist/assets/qml/views/transaction.qml
@@ -7,8 +7,7 @@ import QtQuick.Controls.Styles 1.1
 import Ethereum 1.0
 
 Rectangle {
-	property var iconSource: "../new.png"
-	property var title: "New transaction"
+	property var title: "New Transaction"
 	property var menuItem
 
 	objectName: "newTxView"
@@ -115,7 +114,7 @@ Rectangle {
 				width: 50
 				validator: RegExpValidator { regExp: /\d*/ }
 				placeholderText: "Gas"
-				text: "500"
+				text: "5000"
 			}
 			Label {
 				id: atLabel
diff --git a/mist/assets/qml/views/wallet.qml b/cmd/mist/assets/qml/views/wallet.qml
similarity index 80%
rename from mist/assets/qml/views/wallet.qml
rename to cmd/mist/assets/qml/views/wallet.qml
index a57e7869ab21ca94fc56ae9ed39ad63be29cce37..9727ef35c82280d150842821b4d9021083b34ccf 100644
--- a/mist/assets/qml/views/wallet.qml
+++ b/cmd/mist/assets/qml/views/wallet.qml
@@ -16,7 +16,13 @@ Rectangle {
 	anchors.fill: parent
 
 	function onReady() {
-		menuItem.secondaryTitle = eth.numberToHuman(eth.balanceAt(eth.key().address))
+		setBalance()
+	}
+
+	function setBalance() {
+		balance.text = "<b>Balance</b>: " + eth.numberToHuman(eth.balanceAt(eth.key().address))
+		if(menuItem)
+			menuItem.secondaryTitle = eth.numberToHuman(eth.balanceAt(eth.key().address))
 	}
 
 	ListModel {
@@ -39,7 +45,6 @@ Rectangle {
 
 		Text {
 			id: balance
-			text: "<b>Balance</b>: " + eth.numberToHuman(eth.balanceAt(eth.key().address))
 			font.pixelSize: 24
 			anchors {
 				horizontalCenter: parent.horizontalCenter
@@ -126,7 +131,6 @@ Rectangle {
 						var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros;
 						var gasPrice = "10000000000000"
 						var res = eth.transact({from: eth.key().privateKey, to: txTo.text, value: value, gas: "500", gasPrice: gasPrice})
-						console.log(res)
 					}
 				}
 			}
@@ -144,24 +148,35 @@ Rectangle {
 				id: txTableView
 				anchors.fill : parent
 				TableViewColumn{ role: "num" ; title: "#" ; width: 30 }
-				TableViewColumn{ role: "from" ; title: "From" ; width: 280 }
-				TableViewColumn{ role: "to" ; title: "To" ; width: 280 }
+				TableViewColumn{ role: "from" ; title: "From" ; width: 340 }
+				TableViewColumn{ role: "to" ; title: "To" ; width: 340 }
 				TableViewColumn{ role: "value" ; title: "Amount" ; width: 100 }
 
 				model: ListModel {
 					id: txModel
 					Component.onCompleted: {
-						var filter = ethx.watch({latest: -1, from: eth.key().address});
-						filter.changed(addTxs)
-
-						addTxs(filter.messages())
+						var me = eth.key().address;
+						var filterTo = ethx.watch({latest: -1, to: me});
+						var filterFrom = ethx.watch({latest: -1, from: me});
+						filterTo.changed(addTxs)
+						filterFrom.changed(addTxs)
+
+						addTxs(filterTo.messages())
+						addTxs(filterFrom.messages())
 					}
 
 					function addTxs(messages) {
+						setBalance()
+
 						for(var i = 0; i < messages.length; i++) {
 							var message = messages.get(i);
 							var to = eth.lookupName(message.to);
-							var from = eth.lookupName(message.from);
+							var from;
+							if(message.from.length == 0) {
+								from = "- MINED -";
+							} else {
+								from = eth.lookupName(message.from);
+							}
 							txModel.insert(0, {num: txModel.count, from: from, to: to, value: eth.numberToHuman(message.value)})
 						}
 					}
diff --git a/cmd/mist/assets/qml/webapp.qml b/cmd/mist/assets/qml/webapp.qml
new file mode 100644
index 0000000000000000000000000000000000000000..bd7399dc9b23e3d387b56ec2174ba3e212d26d72
--- /dev/null
+++ b/cmd/mist/assets/qml/webapp.qml
@@ -0,0 +1,413 @@
+import QtQuick 2.0
+import QtWebKit 3.0
+import QtWebKit.experimental 1.0
+import QtQuick.Controls 1.0;
+import QtQuick.Controls.Styles 1.0
+import QtQuick.Layouts 1.0;
+import QtQuick.Window 2.1;
+import Ethereum 1.0
+
+Rectangle {
+    id: window
+    property var title: "Browser"
+    property var iconSource: "../browser.png"
+    property var menuItem
+
+    property alias url: webview.url
+    property alias webView: webview
+
+    property var cleanPath: false
+    property var open: function(url) {
+        if(!window.cleanPath) {
+            var uri = url;
+            if(!/.*\:\/\/.*/.test(uri)) {
+                uri = "http://" + uri;
+            }
+
+            var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/
+
+            if(reg.test(uri)) {
+                uri.replace(reg, function(match, pre, domain, path) {
+                    uri = pre;
+
+                    var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4));
+                    var ip = [];
+                    for(var i = 0, l = lookup.length; i < l; i++) {
+                        ip.push(lookup.charCodeAt(i))
+                    }
+
+                    if(ip.length != 0) {
+                        uri += lookup;
+                    } else {
+                        uri += domain;
+                    }
+
+                    uri += path;
+                });
+            }
+
+            window.cleanPath = true;
+
+            webview.url = uri;
+
+            //uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>");
+            uriNav.text = uri;
+        } else {
+            // Prevent inf loop.
+            window.cleanPath = false;
+        }
+    }
+
+    Component.onCompleted: {
+        webview.url = "http://etherian.io"
+    }
+
+    signal messages(var messages, int id);
+    onMessages: {
+        // Bit of a cheat to get proper JSON
+        var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
+        webview.postEvent("messages", [m, id]);
+    }
+
+    Item {
+        objectName: "root"
+        id: root
+        anchors.fill: parent
+        state: "inspectorShown"
+
+        RowLayout {
+            id: navBar
+            height: 40
+            anchors {
+                left: parent.left
+                right: parent.right
+                leftMargin: 7
+            }
+
+            Button {
+                id: back
+                onClicked: {
+                    webview.goBack()
+                }
+                style: ButtonStyle {
+                    background: Image {
+                        source: "../back.png"
+                        width: 30
+                        height: 30
+                    }
+                }
+            }
+
+            TextField {
+                anchors {
+                    left: back.right
+                    right: toggleInspector.left
+                    leftMargin: 5
+                    rightMargin: 5
+                }
+                text: "http://etherian.io"
+                id: uriNav
+                y: parent.height / 2 - this.height / 2
+
+                Keys.onReturnPressed: {
+                    webview.url = this.text;
+                }
+            }
+
+            Button {
+                id: toggleInspector
+                anchors {
+                    right: parent.right
+                }
+                iconSource: "../bug.png"
+                onClicked: {
+                    if(inspector.visible == true){
+                        inspector.visible = false
+                    }else{
+                        inspector.visible = true
+                        inspector.url = webview.experimental.remoteInspectorUrl
+                    }
+                }
+            }
+        }
+
+
+        WebView {
+            objectName: "webView"
+            id: webview
+            anchors {
+                left: parent.left
+                right: parent.right
+                bottom: parent.bottom
+                top: navBar.bottom
+            }
+
+            //property var cleanPath: false
+            onNavigationRequested: {
+                window.open(request.url.toString());					
+            }
+
+            function sendMessage(data) {
+                webview.experimental.postMessage(JSON.stringify(data))
+            }
+
+
+            experimental.preferences.javascriptEnabled: true
+            experimental.preferences.navigatorQtObjectEnabled: true
+            experimental.preferences.developerExtrasEnabled: true
+            //experimental.userScripts: ["../ext/qt_messaging_adapter.js", "../ext/q.js", "../ext/big.js", "../ext/string.js", "../ext/html_messaging.js"]
+            experimental.userScripts: ["../ext/q.js", "../ext/eth.js/main.js", "../ext/eth.js/qt.js", "../ext/setup.js"]
+            experimental.onMessageReceived: {
+                console.log("[onMessageReceived]: ", message.data)
+                // TODO move to messaging.js
+                var data = JSON.parse(message.data)
+
+                try {
+                    switch(data.call) {
+                        case "compile":
+                        postData(data._id, eth.compile(data.args[0]))
+                        break
+
+                        case "coinbase":
+                        postData(data._id, eth.coinBase())
+
+                        case "account":
+                        postData(data._id, eth.key().address);
+
+                        case "isListening":
+                        postData(data._id, eth.isListening())
+
+                        break
+
+                        case "isMining":
+                        postData(data._id, eth.isMining())
+
+                        break
+
+                        case "peerCount":
+                        postData(data._id, eth.peerCount())
+
+                        break
+
+                        case "countAt":
+                        require(1)
+                        postData(data._id, eth.txCountAt(data.args[0]))
+
+                        break
+
+                        case "codeAt":
+                        require(1)
+                        var code = eth.codeAt(data.args[0])
+                        postData(data._id, code);
+
+                        break
+
+                        case "blockByNumber":
+                        require(1)
+                        var block = eth.blockByNumber(data.args[0])
+                        postData(data._id, block)
+                        break
+
+                        case "blockByHash":
+                        require(1)
+                        var block = eth.blockByHash(data.args[0])
+                        postData(data._id, block)
+                        break
+
+                        require(2)
+                        var block = eth.blockByHash(data.args[0])
+                        postData(data._id, block.transactions[data.args[1]])
+                        break
+
+                        case "transactionByHash":
+                        case "transactionByNumber":
+                        require(2)
+
+                        var block;
+                        if (data.call === "transactionByHash")
+                            block = eth.blockByHash(data.args[0])
+                        else
+                            block = eth.blockByNumber(data.args[0])
+
+                        var tx = block.transactions.get(data.args[1])
+
+                        postData(data._id, tx)
+                        break
+
+                        case "uncleByHash":
+                        case "uncleByNumber":
+                        require(2)
+
+                        var block;
+                        if (data.call === "uncleByHash")
+                            block = eth.blockByHash(data.args[0])
+                        else
+                            block = eth.blockByNumber(data.args[0])
+
+                        var uncle = block.uncles.get(data.args[1])
+
+                        postData(data._id, uncle)
+
+                        break
+
+                        case "transact":
+                        require(5)
+
+                        var tx = eth.transact(data.args)
+                        postData(data._id, tx)
+
+                        break
+
+                        case "stateAt":
+                        require(2);
+
+                        var storage = eth.storageAt(data.args[0], data.args[1]);
+                        postData(data._id, storage)
+
+                        break
+
+                        case "call":
+                        require(1);
+                        var ret = eth.call(data.args)
+                        postData(data._id, ret)
+                        break
+
+                        case "balanceAt":
+                        require(1);
+
+                        postData(data._id, eth.balanceAt(data.args[0]));
+                        break
+
+                        case "watch":
+                        require(2)
+                        eth.watch(data.args[0], data.args[1])
+
+                        case "disconnect":
+                        require(1)
+                        postData(data._id, null)
+                        break;
+
+                        case "messages":
+                        require(1);
+
+                        var messages = JSON.parse(eth.getMessages(data.args[0]))
+                        postData(data._id, messages)
+                        break
+
+                        case "mutan":
+                        require(1)
+
+                        var code = eth.compileMutan(data.args[0])
+                        postData(data._id, "0x"+code)
+                        break;
+
+                        case "newFilterString":
+                        require(1)
+                        var id = eth.newFilterString(data.args[0])
+                        postData(data._id, id);
+                        break;
+
+                        case "newFilter":
+                        require(1)
+                        var id = eth.newFilter(data.args[0])
+
+                        postData(data._id, id);
+                        break;
+
+                        case "getMessages":
+                        require(1);
+
+                        var messages = eth.messages(data.args[0]);
+                        var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
+                        postData(data._id, m);
+
+                        break;
+
+                        case "deleteFilter":
+                        require(1);
+                        eth.uninstallFilter(data.args[0])
+                        break;
+                    }
+                } catch(e) {
+                    console.log(data.call + ": " + e)
+
+                    postData(data._id, null);
+                }
+            }
+
+
+            function post(seed, data) {
+                postData(data._id, data)
+            }
+
+            function require(args, num) {
+                if(args.length < num) {
+                    throw("required argument count of "+num+" got "+args.length);
+                }
+            }
+            function postData(seed, data) {
+                webview.experimental.postMessage(JSON.stringify({data: data, _id: seed}))
+            }
+            function postEvent(event, data) {
+                webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
+            }
+
+            function onWatchedCb(data, id) {
+                var messages = JSON.parse(data)
+                postEvent("watched:"+id, messages)
+            }
+
+            function onNewBlockCb(block) {
+                postEvent("block:new", block)
+            }
+            function onObjectChangeCb(stateObject) {
+                postEvent("object:"+stateObject.address(), stateObject)
+            }
+            function onStorageChangeCb(storageObject) {
+                var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":");
+                postEvent(ev, [storageObject.address, storageObject.value])
+            }
+        }
+
+
+        Rectangle {
+            id: sizeGrip
+            color: "gray"
+            visible: false
+            height: 10
+            anchors {
+                left: root.left
+                right: root.right
+            }
+            y: Math.round(root.height * 2 / 3)
+
+            MouseArea {
+                anchors.fill: parent
+                drag.target: sizeGrip
+                drag.minimumY: 0
+                drag.maximumY: root.height
+                drag.axis: Drag.YAxis
+            }
+        }
+
+        WebView {
+            id: inspector
+            visible: false
+            anchors {
+                left: root.left
+                right: root.right
+                top: sizeGrip.bottom
+                bottom: root.bottom
+            }
+        }
+
+        states: [
+            State {
+                name: "inspectorShown"
+                PropertyChanges {
+                    target: inspector
+                }
+            }
+        ]
+    }
+}
diff --git a/mist/assets/tx.png b/cmd/mist/assets/tx.png
similarity index 100%
rename from mist/assets/tx.png
rename to cmd/mist/assets/tx.png
diff --git a/mist/assets/util/test.html b/cmd/mist/assets/util/test.html
similarity index 100%
rename from mist/assets/util/test.html
rename to cmd/mist/assets/util/test.html
diff --git a/mist/assets/wallet.png b/cmd/mist/assets/wallet.png
similarity index 100%
rename from mist/assets/wallet.png
rename to cmd/mist/assets/wallet.png
diff --git a/mist/bindings.go b/cmd/mist/bindings.go
similarity index 56%
rename from mist/bindings.go
rename to cmd/mist/bindings.go
index 141c4a469fb7340f5057bc17e22158545fe0db4e..6d2342c876f20828a844416f983224c616fb8443 100644
--- a/mist/bindings.go
+++ b/cmd/mist/bindings.go
@@ -1,16 +1,31 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
 	"encoding/json"
-	"fmt"
 	"os"
 	"strconv"
 
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/go-ethereum/utils"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
 )
 
 type plugin struct {
@@ -18,16 +33,8 @@ type plugin struct {
 	Path string `json:"path"`
 }
 
-func (gui *Gui) Println(v ...interface{}) {
-	gui.printLog(fmt.Sprintln(v...))
-}
-
-func (gui *Gui) Printf(format string, v ...interface{}) {
-	gui.printLog(fmt.Sprintf(format, v...))
-}
-
-// Print function that logs directly to the GUI
-func (gui *Gui) printLog(s string) {
+// LogPrint writes to the GUI log.
+func (gui *Gui) LogPrint(level logger.LogLevel, msg string) {
 	/*
 		str := strings.TrimRight(s, "\n")
 		lines := strings.Split(str, "\n")
@@ -38,12 +45,12 @@ func (gui *Gui) printLog(s string) {
 		}
 	*/
 }
-func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (*ethpipe.JSReceipt, error) {
+func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (string, error) {
 	var data string
 	if len(recipient) == 0 {
 		code, err := ethutil.Compile(d, false)
 		if err != nil {
-			return nil, err
+			return "", err
 		}
 		data = ethutil.Bytes2Hex(code)
 	} else {
@@ -62,18 +69,14 @@ func (gui *Gui) GetCustomIdentifier() string {
 	return gui.clientIdentity.GetCustomIdentifier()
 }
 
-func (gui *Gui) ToggleTurboMining() {
-	gui.miner.ToggleTurbo()
-}
-
-// functions that allow Gui to implement interface ethlog.LogSystem
-func (gui *Gui) SetLogLevel(level ethlog.LogLevel) {
+// functions that allow Gui to implement interface guilogger.LogSystem
+func (gui *Gui) SetLogLevel(level logger.LogLevel) {
 	gui.logLevel = level
 	gui.stdLog.SetLogLevel(level)
 	gui.config.Save("loglevel", level)
 }
 
-func (gui *Gui) GetLogLevel() ethlog.LogLevel {
+func (gui *Gui) GetLogLevel() logger.LogLevel {
 	return gui.logLevel
 }
 
@@ -100,18 +103,18 @@ func (self *Gui) DumpState(hash, path string) {
 	var stateDump []byte
 
 	if len(hash) == 0 {
-		stateDump = self.eth.StateManager().CurrentState().Dump()
+		stateDump = self.eth.ChainManager().State().Dump()
 	} else {
-		var block *ethchain.Block
+		var block *types.Block
 		if hash[0] == '#' {
 			i, _ := strconv.Atoi(hash[1:])
-			block = self.eth.BlockChain().GetBlockByNumber(uint64(i))
+			block = self.eth.ChainManager().GetBlockByNumber(uint64(i))
 		} else {
-			block = self.eth.BlockChain().GetBlock(ethutil.Hex2Bytes(hash))
+			block = self.eth.ChainManager().GetBlock(ethutil.Hex2Bytes(hash))
 		}
 
 		if block == nil {
-			logger.Infof("block err: not found %s\n", hash)
+			guilogger.Infof("block err: not found %s\n", hash)
 			return
 		}
 
@@ -120,29 +123,12 @@ func (self *Gui) DumpState(hash, path string) {
 
 	file, err := os.OpenFile(path[7:], os.O_CREATE|os.O_RDWR, os.ModePerm)
 	if err != nil {
-		logger.Infoln("dump err: ", err)
+		guilogger.Infoln("dump err: ", err)
 		return
 	}
 	defer file.Close()
 
-	logger.Infof("dumped state (%s) to %s\n", hash, path)
+	guilogger.Infof("dumped state (%s) to %s\n", hash, path)
 
 	file.Write(stateDump)
 }
-func (gui *Gui) ToggleMining() {
-	var txt string
-	if gui.eth.Mining {
-		utils.StopMining(gui.eth)
-		txt = "Start mining"
-
-		gui.getObjectByName("miningLabel").Set("visible", false)
-	} else {
-		utils.StartMining(gui.eth)
-		gui.miner = utils.GetMiner()
-		txt = "Stop mining"
-
-		gui.getObjectByName("miningLabel").Set("visible", true)
-	}
-
-	gui.win.Root().Set("miningButtonText", txt)
-}
diff --git a/mist/debugger.go b/cmd/mist/debugger.go
similarity index 74%
rename from mist/debugger.go
rename to cmd/mist/debugger.go
index 9d1de8c4251803670e4938d9d99c1a43889f3fe7..a7a286e2359585ebb1d91fead174f42791dfc21c 100644
--- a/mist/debugger.go
+++ b/cmd/mist/debugger.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
@@ -7,11 +24,11 @@ import (
 	"strings"
 	"unicode"
 
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/eth-go/ethvm"
-	"github.com/ethereum/go-ethereum/utils"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
 	"gopkg.in/qml.v1"
 )
 
@@ -20,10 +37,10 @@ type DebuggerWindow struct {
 	engine *qml.Engine
 	lib    *UiLib
 
-	vm *ethvm.Vm
+	vm *vm.DebugVm
 	Db *Debugger
 
-	state *ethstate.State
+	state *state.StateDB
 }
 
 func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
@@ -37,7 +54,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
 
 	win := component.CreateWindow(nil)
 
-	w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: ðvm.Vm{}}
+	w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: &vm.DebugVm{}}
 	w.Db = NewDebugger(w)
 
 	return w
@@ -64,7 +81,7 @@ func (self *DebuggerWindow) SetData(data string) {
 func (self *DebuggerWindow) SetAsm(data []byte) {
 	self.win.Root().Call("clearAsm")
 
-	dis := ethchain.Disassemble(data)
+	dis := core.Disassemble(data)
 	for _, str := range dis {
 		self.win.Root().Call("setAsm", str)
 	}
@@ -124,28 +141,24 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 		keyPair = self.lib.eth.KeyManager().KeyPair()
 	)
 
-	state := self.lib.eth.StateManager().TransState()
-	account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
-	contract := ethstate.NewStateObject([]byte{0})
-	contract.Balance = value
+	statedb := self.lib.eth.ChainManager().TransState()
+	account := self.lib.eth.ChainManager().TransState().GetAccount(keyPair.Address())
+	contract := statedb.NewStateObject([]byte{0})
+	contract.SetCode(script)
+	contract.SetBalance(value)
 
 	self.SetAsm(script)
 
-	block := self.lib.eth.BlockChain().CurrentBlock
+	block := self.lib.eth.ChainManager().CurrentBlock()
 
-	callerClosure := ethvm.NewClosure(ðstate.Message{}, account, contract, script, gas, gasPrice)
-	env := utils.NewEnv(state, block, account.Address(), value)
-	vm := ethvm.New(env)
-	vm.Verbose = true
-	vm.Dbg = self.Db
+	env := utils.NewEnv(statedb, block, account.Address(), value)
 
-	self.vm = vm
-	self.Db.done = false
 	self.Logf("callsize %d", len(script))
 	go func() {
-		ret, g, err := callerClosure.Call(vm, data)
-		tot := new(big.Int).Mul(g, gasPrice)
-		self.Logf("gas usage %v total price = %v (%v)", g, tot, ethutil.CurrencyToString(tot))
+		ret, err := env.Call(account, contract.Address(), data, gas, gasPrice, ethutil.Big0)
+		//ret, g, err := callerClosure.Call(evm, data)
+		tot := new(big.Int).Mul(env.Gas, gasPrice)
+		self.Logf("gas usage %v total price = %v (%v)", env.Gas, tot, ethutil.CurrencyToString(tot))
 		if err != nil {
 			self.Logln("exited with errors:", err)
 		} else {
@@ -156,7 +169,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 			}
 		}
 
-		state.Reset()
+		statedb.Reset()
 
 		if !self.Db.interrupt {
 			self.Db.done = true
@@ -251,13 +264,13 @@ type storeVal struct {
 	Key, Value string
 }
 
-func (self *Debugger) BreakHook(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
+func (self *Debugger) BreakHook(pc int, op vm.OpCode, mem *vm.Memory, stack *vm.Stack, stateObject *state.StateObject) bool {
 	self.main.Logln("break on instr:", pc)
 
 	return self.halting(pc, op, mem, stack, stateObject)
 }
 
-func (self *Debugger) StepHook(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
+func (self *Debugger) StepHook(pc int, op vm.OpCode, mem *vm.Memory, stack *vm.Stack, stateObject *state.StateObject) bool {
 	return self.halting(pc, op, mem, stack, stateObject)
 }
 
@@ -269,7 +282,7 @@ func (self *Debugger) BreakPoints() []int64 {
 	return self.breakPoints
 }
 
-func (d *Debugger) halting(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
+func (d *Debugger) halting(pc int, op vm.OpCode, mem *vm.Memory, stack *vm.Stack, stateObject *state.StateObject) bool {
 	d.win.Root().Call("setInstruction", pc)
 	d.win.Root().Call("clearMem")
 	d.win.Root().Call("clearStack")
diff --git a/cmd/mist/errors.go b/cmd/mist/errors.go
new file mode 100644
index 0000000000000000000000000000000000000000..2069bf26d907fe5834e75a604b5078043b20bf33
--- /dev/null
+++ b/cmd/mist/errors.go
@@ -0,0 +1,53 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+package main
+
+import (
+	"fmt"
+	"os"
+
+	"gopkg.in/qml.v1"
+)
+
+func ErrorWindow(err error) {
+	engine := qml.NewEngine()
+	component, e := engine.LoadString("local", qmlErr)
+	if e != nil {
+		fmt.Println("err:", err)
+		os.Exit(1)
+	}
+
+	win := component.CreateWindow(nil)
+	win.Root().ObjectByName("label").Set("text", err.Error())
+	win.Show()
+	win.Wait()
+}
+
+const qmlErr = `
+import QtQuick 2.0; import QtQuick.Controls 1.0;
+ApplicationWindow {
+	width: 600; height: 150;
+	flags: Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint
+	title: "Error"
+	Text {
+		x: parent.width / 2 - this.width / 2;
+		y: parent.height / 2 - this.height / 2;
+		objectName: "label";
+	}
+}
+`
diff --git a/cmd/mist/ext_app.go b/cmd/mist/ext_app.go
new file mode 100644
index 0000000000000000000000000000000000000000..33c420a7a10264377680fa826906c0bc0e45af4f
--- /dev/null
+++ b/cmd/mist/ext_app.go
@@ -0,0 +1,143 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+package main
+
+import (
+	"encoding/json"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/javascript"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/ui/qt"
+	"github.com/ethereum/go-ethereum/xeth"
+	"gopkg.in/qml.v1"
+)
+
+type AppContainer interface {
+	Create() error
+	Destroy()
+
+	Window() *qml.Window
+	Engine() *qml.Engine
+
+	NewBlock(*types.Block)
+	NewWatcher(chan bool)
+	Messages(state.Messages, string)
+	Post(string, int)
+}
+
+type ExtApplication struct {
+	*xeth.JSXEth
+	eth core.EthManager
+
+	events          event.Subscription
+	watcherQuitChan chan bool
+
+	filters map[string]*core.Filter
+
+	container AppContainer
+	lib       *UiLib
+}
+
+func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication {
+	return &ExtApplication{
+		JSXEth:          xeth.NewJSXEth(lib.eth),
+		eth:             lib.eth,
+		watcherQuitChan: make(chan bool),
+		filters:         make(map[string]*core.Filter),
+		container:       container,
+		lib:             lib,
+	}
+}
+
+func (app *ExtApplication) run() {
+	// Set the "eth" api on to the containers context
+	context := app.container.Engine().Context()
+	context.SetVar("eth", app)
+	context.SetVar("ui", app.lib)
+
+	err := app.container.Create()
+	if err != nil {
+		guilogger.Errorln(err)
+		return
+	}
+
+	// Subscribe to events
+	mux := app.lib.eth.EventMux()
+	app.events = mux.Subscribe(core.NewBlockEvent{}, state.Messages(nil))
+
+	// Call the main loop
+	go app.mainLoop()
+
+	app.container.NewWatcher(app.watcherQuitChan)
+
+	win := app.container.Window()
+	win.Show()
+	win.Wait()
+
+	app.stop()
+}
+
+func (app *ExtApplication) stop() {
+	app.events.Unsubscribe()
+
+	// Kill the main loop
+	app.watcherQuitChan <- true
+
+	app.container.Destroy()
+}
+
+func (app *ExtApplication) mainLoop() {
+	for ev := range app.events.Chan() {
+		switch ev := ev.(type) {
+		case core.NewBlockEvent:
+			app.container.NewBlock(ev.Block)
+
+		case state.Messages:
+			for id, filter := range app.filters {
+				msgs := filter.FilterMessages(ev)
+				if len(msgs) > 0 {
+					app.container.Messages(msgs, id)
+				}
+			}
+		}
+	}
+}
+
+func (self *ExtApplication) Watch(filterOptions map[string]interface{}, identifier string) {
+	self.filters[identifier] = qt.NewFilterFromMap(filterOptions, self.eth)
+}
+
+func (self *ExtApplication) GetMessages(object map[string]interface{}) string {
+	filter := qt.NewFilterFromMap(object, self.eth)
+
+	messages := filter.Find()
+	var msgs []javascript.JSMessage
+	for _, m := range messages {
+		msgs = append(msgs, javascript.NewJSMessage(m))
+	}
+
+	b, err := json.Marshal(msgs)
+	if err != nil {
+		return "{\"error\":" + err.Error() + "}"
+	}
+
+	return string(b)
+}
diff --git a/mist/flags.go b/cmd/mist/flags.go
similarity index 60%
rename from mist/flags.go
rename to cmd/mist/flags.go
index d2e7d3fb08dc298d70a4db3ee745450470a9ba05..e494081813f8db3f8c63548d55268245834bc467 100644
--- a/mist/flags.go
+++ b/cmd/mist/flags.go
@@ -1,8 +1,26 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
 	"flag"
 	"fmt"
+	"log"
 	"os"
 	"os/user"
 	"path"
@@ -10,29 +28,34 @@ import (
 	"runtime"
 
 	"bitbucket.org/kardianos/osext"
-	"github.com/ethereum/eth-go/ethlog"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/vm"
 )
 
-var Identifier string
-var KeyRing string
-var KeyStore string
-var StartRpc bool
-var RpcPort int
-var UseUPnP bool
-var OutboundPort string
-var ShowGenesis bool
-var AddPeer string
-var MaxPeer int
-var GenAddr bool
-var UseSeed bool
-var SecretFile string
-var ExportDir string
-var NonInteractive bool
-var Datadir string
-var LogFile string
-var ConfigFile string
-var DebugFile string
-var LogLevel int
+var (
+	Identifier      string
+	KeyRing         string
+	KeyStore        string
+	StartRpc        bool
+	StartWebSockets bool
+	RpcPort         int
+	UseUPnP         bool
+	OutboundPort    string
+	ShowGenesis     bool
+	AddPeer         string
+	MaxPeer         int
+	GenAddr         bool
+	UseSeed         bool
+	SecretFile      string
+	ExportDir       string
+	NonInteractive  bool
+	Datadir         string
+	LogFile         string
+	ConfigFile      string
+	DebugFile       string
+	LogLevel        int
+	VmType          int
+)
 
 // flags specific to gui client
 var AssetPath string
@@ -44,7 +67,7 @@ func defaultAssetPath() string {
 	// assume a debug build and use the source directory as
 	// asset directory.
 	pwd, _ := os.Getwd()
-	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "mist") {
+	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist") {
 		assetPath = path.Join(pwd, "assets")
 	} else {
 		switch runtime.GOOS {
@@ -75,14 +98,16 @@ func Init() {
 		flag.PrintDefaults()
 	}
 
+	flag.IntVar(&VmType, "vm", 0, "Virtual Machine type: 0-1: standard, debug")
 	flag.StringVar(&Identifier, "id", "", "Custom client identifier")
 	flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
 	flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)")
 	flag.StringVar(&OutboundPort, "port", "30303", "listening port")
 	flag.BoolVar(&UseUPnP, "upnp", true, "enable UPnP support")
-	flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers")
+	flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers")
 	flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on")
 	flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
+	flag.BoolVar(&StartWebSockets, "ws", false, "start websocket server")
 	flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
 	flag.BoolVar(&UseSeed, "seed", true, "seed peers")
 	flag.BoolVar(&GenAddr, "genaddr", false, "create a new priv/pub key")
@@ -92,9 +117,13 @@ func Init() {
 	flag.StringVar(&Datadir, "datadir", defaultDataDir(), "specifies the datadir to use")
 	flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
 	flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
-	flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
+	flag.IntVar(&LogLevel, "loglevel", int(logger.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
 
 	flag.StringVar(&AssetPath, "asset_path", defaultAssetPath(), "absolute path to GUI assets directory")
 
 	flag.Parse()
+
+	if VmType >= int(vm.MaxVmTy) {
+		log.Fatal("Invalid VM type ", VmType)
+	}
 }
diff --git a/mist/gui.go b/cmd/mist/gui.go
similarity index 57%
rename from mist/gui.go
rename to cmd/mist/gui.go
index 80d4a1fc3fd98226881a7fcf0a9b8d7e54015393..7775889cc6c9c71dc19603eaf576d2b8bad10c32 100644
--- a/mist/gui.go
+++ b/cmd/mist/gui.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import "C"
@@ -13,15 +30,15 @@ import (
 	"strings"
 	"time"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethdb"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethminer"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethreact"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/eth-go/ethwire"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/miner"
+	"github.com/ethereum/go-ethereum/wire"
+	"github.com/ethereum/go-ethereum/xeth"
 	"gopkg.in/qml.v1"
 )
 
@@ -47,8 +64,17 @@ func LoadExtension(path string) (uintptr, error) {
 	return ptr.Interface().(uintptr), nil
 }
 */
+/*
+	vec, errr := LoadExtension("/Users/jeffrey/Desktop/build-libqmltest-Desktop_Qt_5_2_1_clang_64bit-Debug/liblibqmltest_debug.dylib")
+	fmt.Printf("Fetched vec with addr: %#x\n", vec)
+	if errr != nil {
+		fmt.Println(errr)
+	} else {
+		context.SetVar("vec", (unsafe.Pointer)(vec))
+	}
+*/
 
-var logger = ethlog.NewLogger("GUI")
+var guilogger = logger.NewLogger("GUI")
 
 type Gui struct {
 	// The main application window
@@ -65,30 +91,30 @@ type Gui struct {
 
 	txDb *ethdb.LDBDatabase
 
-	logLevel ethlog.LogLevel
+	logLevel logger.LogLevel
 	open     bool
 
-	pipe *ethpipe.JSPipe
+	pipe *xeth.JSXEth
 
 	Session        string
-	clientIdentity *ethwire.SimpleClientIdentity
+	clientIdentity *wire.SimpleClientIdentity
 	config         *ethutil.ConfigManager
 
 	plugins map[string]plugin
 
-	miner  *ethminer.Miner
-	stdLog ethlog.LogSystem
+	miner  *miner.Miner
+	stdLog logger.LogSystem
 }
 
 // Create GUI, but doesn't start it
-func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIdentity *ethwire.SimpleClientIdentity, session string, logLevel int) *Gui {
+func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIdentity *wire.SimpleClientIdentity, session string, logLevel int) *Gui {
 	db, err := ethdb.NewLDBDatabase("tx_database")
 	if err != nil {
 		panic(err)
 	}
 
-	pipe := ethpipe.NewJSPipe(ethereum)
-	gui := &Gui{eth: ethereum, txDb: db, pipe: pipe, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config, plugins: make(map[string]plugin)}
+	pipe := xeth.NewJSXEth(ethereum)
+	gui := &Gui{eth: ethereum, txDb: db, pipe: pipe, logLevel: logger.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config, plugins: make(map[string]plugin)}
 	data, _ := ethutil.ReadAllFile(path.Join(ethutil.Config.ExecPath, "plugins.json"))
 	json.Unmarshal([]byte(data), &gui.plugins)
 
@@ -96,16 +122,17 @@ func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIden
 }
 
 func (gui *Gui) Start(assetPath string) {
-
 	defer gui.txDb.Close()
 
+	guilogger.Infoln("Starting GUI")
+
 	// Register ethereum functions
 	qml.RegisterTypes("Ethereum", 1, 0, []qml.TypeSpec{{
-		Init: func(p *ethpipe.JSBlock, obj qml.Object) { p.Number = 0; p.Hash = "" },
+		Init: func(p *xeth.JSBlock, obj qml.Object) { p.Number = 0; p.Hash = "" },
 	}, {
-		Init: func(p *ethpipe.JSTransaction, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" },
+		Init: func(p *xeth.JSTransaction, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" },
 	}, {
-		Init: func(p *ethpipe.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
+		Init: func(p *xeth.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
 	}})
 	// Create a new QML engine
 	gui.engine = qml.NewEngine()
@@ -116,16 +143,6 @@ func (gui *Gui) Start(assetPath string) {
 	context.SetVar("gui", gui)
 	context.SetVar("eth", gui.uiLib)
 
-	/*
-		vec, errr := LoadExtension("/Users/jeffrey/Desktop/build-libqmltest-Desktop_Qt_5_2_1_clang_64bit-Debug/liblibqmltest_debug.dylib")
-		fmt.Printf("Fetched vec with addr: %#x\n", vec)
-		if errr != nil {
-			fmt.Println(errr)
-		} else {
-			context.SetVar("vec", (unsafe.Pointer)(vec))
-		}
-	*/
-
 	// Load the main QML interface
 	data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
 
@@ -139,36 +156,35 @@ func (gui *Gui) Start(assetPath string) {
 		addlog = true
 	}
 	if err != nil {
-		logger.Errorln("asset not found: you can set an alternative asset path on the command line using option 'asset_path'", err)
+		guilogger.Errorln("asset not found: you can set an alternative asset path on the command line using option 'asset_path'", err)
 
 		panic(err)
 	}
 
-	logger.Infoln("Starting GUI")
 	gui.open = true
 	win.Show()
 
-	// only add the gui logger after window is shown otherwise slider wont be shown
+	// only add the gui guilogger after window is shown otherwise slider wont be shown
 	if addlog {
-		ethlog.AddLogSystem(gui)
+		logger.AddLogSystem(gui)
 	}
 	win.Wait()
 
-	// need to silence gui logger after window closed otherwise logsystem hangs (but do not save loglevel)
-	gui.logLevel = ethlog.Silence
+	// need to silence gui guilogger after window closed otherwise logsystem hangs (but do not save loglevel)
+	gui.logLevel = logger.Silence
 	gui.open = false
 }
 
 func (gui *Gui) Stop() {
 	if gui.open {
-		gui.logLevel = ethlog.Silence
+		gui.logLevel = logger.Silence
 		gui.open = false
 		gui.win.Hide()
 	}
 
 	gui.uiLib.jsEngine.Stop()
 
-	logger.Infoln("Stopped")
+	guilogger.Infoln("Stopped")
 }
 
 func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) {
@@ -213,51 +229,34 @@ func (gui *Gui) createWindow(comp qml.Object) *qml.Window {
 func (gui *Gui) ImportAndSetPrivKey(secret string) bool {
 	err := gui.eth.KeyManager().InitFromString(gui.Session, 0, secret)
 	if err != nil {
-		logger.Errorln("unable to import: ", err)
+		guilogger.Errorln("unable to import: ", err)
 		return false
 	}
-	logger.Errorln("successfully imported: ", err)
+	guilogger.Errorln("successfully imported: ", err)
 	return true
 }
 
 func (gui *Gui) CreateAndSetPrivKey() (string, string, string, string) {
 	err := gui.eth.KeyManager().Init(gui.Session, 0, true)
 	if err != nil {
-		logger.Errorln("unable to create key: ", err)
+		guilogger.Errorln("unable to create key: ", err)
 		return "", "", "", ""
 	}
 	return gui.eth.KeyManager().KeyPair().AsStrings()
 }
 
-func (gui *Gui) setInitialBlockChain() {
-	sBlk := gui.eth.BlockChain().LastBlockHash
-	blk := gui.eth.BlockChain().GetBlock(sBlk)
-	for ; blk != nil; blk = gui.eth.BlockChain().GetBlock(sBlk) {
+func (gui *Gui) setInitialChain(ancientBlocks bool) {
+	sBlk := gui.eth.ChainManager().LastBlockHash()
+	blk := gui.eth.ChainManager().GetBlock(sBlk)
+	for ; blk != nil; blk = gui.eth.ChainManager().GetBlock(sBlk) {
 		sBlk = blk.PrevHash
-		addr := gui.address()
-
-		// Loop through all transactions to see if we missed any while being offline
-		for _, tx := range blk.Transactions() {
-			if bytes.Compare(tx.Sender(), addr) == 0 || bytes.Compare(tx.Recipient, addr) == 0 {
-				if ok, _ := gui.txDb.Get(tx.Hash()); ok == nil {
-					gui.txDb.Put(tx.Hash(), tx.RlpEncode())
-				}
-
-			}
-		}
 
 		gui.processBlock(blk, true)
 	}
 }
 
-type address struct {
-	Name, Address string
-}
-
 func (gui *Gui) loadAddressBook() {
 	view := gui.getObjectByName("infoView")
-	view.Call("clearAddress")
-
 	nameReg := gui.pipe.World().Config().Get("NameReg")
 	if nameReg != nil {
 		nameReg.EachStorage(func(name string, value *ethutil.Value) {
@@ -270,8 +269,30 @@ func (gui *Gui) loadAddressBook() {
 	}
 }
 
-func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
-	pipe := ethpipe.New(gui.eth)
+func (self *Gui) loadMergedMiningOptions() {
+	view := self.getObjectByName("mergedMiningModel")
+
+	nameReg := self.pipe.World().Config().Get("MergeMining")
+	if nameReg != nil {
+		i := 0
+		nameReg.EachStorage(func(name string, value *ethutil.Value) {
+			if name[0] != 0 {
+				value.Decode()
+
+				view.Call("addMergedMiningOption", struct {
+					Checked       bool
+					Name, Address string
+					Id, ItemId    int
+				}{false, name, ethutil.Bytes2Hex(value.Bytes()), 0, i})
+
+				i++
+			}
+		})
+	}
+}
+
+func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
+	pipe := xeth.New(gui.eth)
 	nameReg := pipe.World().Config().Get("NameReg")
 	addr := gui.address()
 
@@ -283,14 +304,14 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
 	}
 
 	var (
-		ptx  = ethpipe.NewJSTx(tx, pipe.World().State())
-		send = nameReg.Storage(tx.Sender())
-		rec  = nameReg.Storage(tx.Recipient)
+		ptx  = xeth.NewJSTx(tx, pipe.World().State())
+		send = nameReg.Storage(tx.From())
+		rec  = nameReg.Storage(tx.To())
 		s, r string
 	)
 
-	if tx.CreatesContract() {
-		rec = nameReg.Storage(tx.CreationAddress(pipe.World().State()))
+	if core.MessageCreatesContract(tx) {
+		rec = nameReg.Storage(core.AddressFromMessage(tx))
 	}
 
 	if send.Len() != 0 {
@@ -301,10 +322,10 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
 	if rec.Len() != 0 {
 		r = strings.Trim(rec.Str(), "\x00")
 	} else {
-		if tx.CreatesContract() {
-			r = ethutil.Bytes2Hex(tx.CreationAddress(pipe.World().State()))
+		if core.MessageCreatesContract(tx) {
+			r = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 		} else {
-			r = ethutil.Bytes2Hex(tx.Recipient)
+			r = ethutil.Bytes2Hex(tx.To())
 		}
 	}
 	ptx.Sender = s
@@ -318,9 +339,9 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
 }
 
 func (gui *Gui) readPreviousTransactions() {
-	it := gui.txDb.Db().NewIterator(nil, nil)
+	it := gui.txDb.NewIterator()
 	for it.Next() {
-		tx := ethchain.NewTransactionFromBytes(it.Value())
+		tx := types.NewTransactionFromBytes(it.Value())
 
 		gui.insertTransaction("post", tx)
 
@@ -328,9 +349,9 @@ func (gui *Gui) readPreviousTransactions() {
 	it.Release()
 }
 
-func (gui *Gui) processBlock(block *ethchain.Block, initial bool) {
+func (gui *Gui) processBlock(block *types.Block, initial bool) {
 	name := strings.Trim(gui.pipe.World().Config().Get("NameReg").Storage(block.Coinbase).Str(), "\x00")
-	b := ethpipe.NewJSBlock(block)
+	b := xeth.NewJSBlock(block)
 	b.Name = name
 
 	gui.getObjectByName("chainView").Call("addBlock", b, initial)
@@ -360,106 +381,96 @@ func (self *Gui) getObjectByName(objectName string) qml.Object {
 func (gui *Gui) update() {
 	// We have to wait for qml to be done loading all the windows.
 	for !gui.qmlDone {
-		time.Sleep(500 * time.Millisecond)
+		time.Sleep(300 * time.Millisecond)
 	}
 
 	go func() {
-		go gui.setInitialBlockChain()
+		go gui.setInitialChain(false)
 		gui.loadAddressBook()
+		gui.loadMergedMiningOptions()
 		gui.setPeerInfo()
-		gui.readPreviousTransactions()
 	}()
 
 	for _, plugin := range gui.plugins {
-		logger.Infoln("Loading plugin ", plugin.Name)
+		guilogger.Infoln("Loading plugin ", plugin.Name)
 
 		gui.win.Root().Call("addPlugin", plugin.Path, "")
 	}
 
-	var (
-		blockChan     = make(chan ethreact.Event, 100)
-		txChan        = make(chan ethreact.Event, 100)
-		objectChan    = make(chan ethreact.Event, 100)
-		peerChan      = make(chan ethreact.Event, 100)
-		chainSyncChan = make(chan ethreact.Event, 100)
-		miningChan    = make(chan ethreact.Event, 100)
-	)
-
 	peerUpdateTicker := time.NewTicker(5 * time.Second)
 	generalUpdateTicker := time.NewTicker(500 * time.Millisecond)
 	statsUpdateTicker := time.NewTicker(5 * time.Second)
 
-	state := gui.eth.StateManager().TransState()
+	state := gui.eth.ChainManager().TransState()
 
-	unconfirmedFunds := new(big.Int)
-	gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance)))
+	gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance())))
 
 	lastBlockLabel := gui.getObjectByName("lastBlockLabel")
 	miningLabel := gui.getObjectByName("miningLabel")
 
+	events := gui.eth.EventMux().Subscribe(
+		eth.ChainSyncEvent{},
+		eth.PeerListEvent{},
+		core.NewBlockEvent{},
+		core.TxPreEvent{},
+		core.TxPostEvent{},
+	)
+
 	go func() {
+		defer events.Unsubscribe()
 		for {
 			select {
-			case b := <-blockChan:
-				block := b.Resource.(*ethchain.Block)
-				gui.processBlock(block, false)
-				if bytes.Compare(block.Coinbase, gui.address()) == 0 {
-					gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance, nil)
+			case ev, isopen := <-events.Chan():
+				if !isopen {
+					return
 				}
-			case txMsg := <-txChan:
-				tx := txMsg.Resource.(*ethchain.Transaction)
+				switch ev := ev.(type) {
+				case core.NewBlockEvent:
+					gui.processBlock(ev.Block, false)
+					if bytes.Compare(ev.Block.Coinbase, gui.address()) == 0 {
+						gui.setWalletValue(gui.eth.ChainManager().State().GetBalance(gui.address()), nil)
+					}
 
-				if txMsg.Name == "newTx:pre" {
-					object := state.GetAccount(gui.address())
+				case core.TxPreEvent:
+					tx := ev.Tx
 
-					if bytes.Compare(tx.Sender(), gui.address()) == 0 {
-						unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
-					} else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
-						unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
-					}
+					tstate := gui.eth.ChainManager().TransState()
+					cstate := gui.eth.ChainManager().State()
 
-					gui.setWalletValue(object.Balance, unconfirmedFunds)
+					taccount := tstate.GetAccount(gui.address())
+					caccount := cstate.GetAccount(gui.address())
+					unconfirmedFunds := new(big.Int).Sub(taccount.Balance(), caccount.Balance())
 
+					gui.setWalletValue(taccount.Balance(), unconfirmedFunds)
 					gui.insertTransaction("pre", tx)
-				} else {
+
+				case core.TxPostEvent:
+					tx := ev.Tx
 					object := state.GetAccount(gui.address())
+
 					if bytes.Compare(tx.Sender(), gui.address()) == 0 {
-						object.SubAmount(tx.Value)
+						object.SubAmount(tx.Value())
 
-						//gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
 						gui.txDb.Put(tx.Hash(), tx.RlpEncode())
-					} else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
-						object.AddAmount(tx.Value)
+					} else if bytes.Compare(tx.To(), gui.address()) == 0 {
+						object.AddAmount(tx.Value())
 
-						//gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
 						gui.txDb.Put(tx.Hash(), tx.RlpEncode())
 					}
 
-					gui.setWalletValue(object.Balance, nil)
-
+					gui.setWalletValue(object.Balance(), nil)
 					state.UpdateStateObject(object)
+
+				case eth.PeerListEvent:
+					gui.setPeerInfo()
 				}
 
-			case <-objectChan:
-				gui.loadAddressBook()
-			case <-peerChan:
-				gui.setPeerInfo()
 			case <-peerUpdateTicker.C:
 				gui.setPeerInfo()
-			case msg := <-miningChan:
-				if msg.Name == "miner:start" {
-					gui.miner = msg.Resource.(*ethminer.Miner)
-				} else {
-					gui.miner = nil
-				}
 			case <-generalUpdateTicker.C:
-				statusText := "#" + gui.eth.BlockChain().CurrentBlock.Number.String()
+				statusText := "#" + gui.eth.ChainManager().CurrentBlock().Number.String()
 				lastBlockLabel.Set("text", statusText)
-
-				if gui.miner != nil {
-					pow := gui.miner.GetPow()
-					miningLabel.Set("text", "Mining @ "+strconv.FormatInt(pow.GetHashrate(), 10)+"Khash")
-				}
+				miningLabel.Set("text", "Mining @ "+strconv.FormatInt(gui.uiLib.miner.GetPow().GetHashrate(), 10)+"Khash")
 
 				blockLength := gui.eth.BlockPool().BlocksProcessed
 				chainLength := gui.eth.BlockPool().ChainLength
@@ -469,7 +480,6 @@ func (gui *Gui) update() {
 					dlWidget         = gui.win.Root().ObjectByName("downloadIndicator")
 					dlLabel          = gui.win.Root().ObjectByName("downloadLabel")
 				)
-
 				dlWidget.Set("value", pct)
 				dlLabel.Set("text", fmt.Sprintf("%d / %d", blockLength, chainLength))
 
@@ -478,20 +488,6 @@ func (gui *Gui) update() {
 			}
 		}
 	}()
-
-	reactor := gui.eth.Reactor()
-
-	reactor.Subscribe("newBlock", blockChan)
-	reactor.Subscribe("newTx:pre", txChan)
-	reactor.Subscribe("newTx:post", txChan)
-	reactor.Subscribe("chainSync", chainSyncChan)
-	reactor.Subscribe("miner:start", miningChan)
-	reactor.Subscribe("miner:stop", miningChan)
-
-	nameReg := gui.pipe.World().Config().Get("NameReg")
-	reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
-
-	reactor.Subscribe("peerList", peerChan)
 }
 
 func (gui *Gui) setStatsPane() {
@@ -499,7 +495,7 @@ func (gui *Gui) setStatsPane() {
 	runtime.ReadMemStats(&memStats)
 
 	statsPane := gui.getObjectByName("statsPane")
-	statsPane.Set("text", fmt.Sprintf(`###### Mist 0.6.8 (%s) #######
+	statsPane.Set("text", fmt.Sprintf(`###### Mist %s (%s) #######
 
 eth %d (p2p = %d)
 
@@ -512,7 +508,7 @@ Heap Alloc: %d
 
 CGNext:     %x
 NumGC:      %d
-`, runtime.Version(),
+`, Version, runtime.Version(),
 		eth.ProtocolVersion, eth.P2PVersion,
 		runtime.NumCPU, runtime.NumGoroutine(), runtime.NumCgoCall(),
 		memStats.Alloc, memStats.HeapAlloc,
@@ -522,7 +518,6 @@ NumGC:      %d
 
 func (gui *Gui) setPeerInfo() {
 	gui.win.Root().Call("setPeers", fmt.Sprintf("%d / %d", gui.eth.PeerCount(), gui.eth.MaxPeers))
-
 	gui.win.Root().Call("resetPeers")
 	for _, peer := range gui.pipe.Peers() {
 		gui.win.Root().Call("addPeer", peer)
diff --git a/mist/html_container.go b/cmd/mist/html_container.go
similarity index 64%
rename from mist/html_container.go
rename to cmd/mist/html_container.go
index 69edea5703bb08106ac969d90907cfc5fc5cf0f7..b3fc219fad7da943e9a239113c9655f025714b3b 100644
--- a/mist/html_container.go
+++ b/cmd/mist/html_container.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
@@ -10,11 +27,11 @@ import (
 	"path"
 	"path/filepath"
 
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/javascript"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/xeth"
 	"github.com/howeyc/fsnotify"
 	"gopkg.in/qml.v1"
 )
@@ -81,12 +98,12 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) {
 
 	app.watcher, err = fsnotify.NewWatcher()
 	if err != nil {
-		logger.Infoln("Could not create new auto-reload watcher:", err)
+		guilogger.Infoln("Could not create new auto-reload watcher:", err)
 		return
 	}
 	err = app.watcher.Watch(app.RootFolder())
 	if err != nil {
-		logger.Infoln("Could not start auto-reload watcher:", err)
+		guilogger.Infoln("Could not start auto-reload watcher:", err)
 		return
 	}
 	for _, folder := range app.RecursiveFolders() {
@@ -102,11 +119,11 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) {
 				app.watcher.Close()
 				break out
 			case <-app.watcher.Event:
-				//logger.Debugln("Got event:", ev)
+				//guilogger.Debugln("Got event:", ev)
 				app.webView.Call("reload")
 			case err := <-app.watcher.Error:
 				// TODO: Do something here
-				logger.Infoln("Watcher error:", err)
+				guilogger.Infoln("Watcher error:", err)
 			}
 		}
 	}()
@@ -121,12 +138,12 @@ func (app *HtmlApplication) Window() *qml.Window {
 	return app.win
 }
 
-func (app *HtmlApplication) NewBlock(block *ethchain.Block) {
-	b := ðpipe.JSBlock{Number: int(block.BlockInfo().Number), Hash: ethutil.Bytes2Hex(block.Hash())}
+func (app *HtmlApplication) NewBlock(block *types.Block) {
+	b := &xeth.JSBlock{Number: int(block.BlockInfo().Number), Hash: ethutil.Bytes2Hex(block.Hash())}
 	app.webView.Call("onNewBlockCb", b)
 }
 
-func (self *HtmlApplication) Messages(messages ethstate.Messages, id string) {
+func (self *HtmlApplication) Messages(messages state.Messages, id string) {
 	var msgs []javascript.JSMessage
 	for _, m := range messages {
 		msgs = append(msgs, javascript.NewJSMessage(m))
diff --git a/mist/main.go b/cmd/mist/main.go
similarity index 58%
rename from mist/main.go
rename to cmd/mist/main.go
index 6e4554352776fa10a3d9e390711838be458fa0ab..eaf0af0c7704c629cfd13c7a82e749011bfcf7ae 100644
--- a/mist/main.go
+++ b/cmd/mist/main.go
@@ -1,18 +1,37 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
+	"fmt"
 	"os"
 	"runtime"
+	"time"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/go-ethereum/utils"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/logger"
 	"gopkg.in/qml.v1"
 )
 
 const (
 	ClientIdentifier = "Mist"
-	Version          = "0.6.7"
+	Version          = "0.7.10"
 )
 
 var ethereum *eth.Ethereum
@@ -21,7 +40,8 @@ func run() error {
 	// precedence: code-internal flag default < config file < environment variables < command line
 	Init() // parsing command line
 
-	config := utils.InitConfig(ConfigFile, Datadir, "ETH")
+	tstart := time.Now()
+	config := utils.InitConfig(VmType, ConfigFile, Datadir, "ETH")
 
 	utils.InitDataDir(Datadir)
 
@@ -34,14 +54,11 @@ func run() error {
 
 		os.Exit(1)
 	}
-
 	keyManager := utils.NewKeyManager(KeyStore, Datadir, db)
 
 	// create, import, export keys
 	utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive)
-
 	clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier)
-
 	ethereum = utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer)
 
 	if ShowGenesis {
@@ -58,7 +75,10 @@ func run() error {
 	utils.RegisterInterrupt(func(os.Signal) {
 		gui.Stop()
 	})
-	utils.StartEthereum(ethereum, UseSeed)
+	go utils.StartEthereum(ethereum, UseSeed)
+
+	fmt.Println("ETH stack took", time.Since(tstart))
+
 	// gui blocks the main thread
 	gui.Start(AssetPath)
 
@@ -80,6 +100,10 @@ func main() {
 
 	utils.HandleInterrupt()
 
+	if StartWebSockets {
+		utils.StartWebSockets(ethereum)
+	}
+
 	// we need to run the interrupt callbacks in case gui is closed
 	// this skips if we got here by actual interrupt stopping the GUI
 	if !interrupted {
@@ -87,5 +111,5 @@ func main() {
 	}
 	// this blocks the thread
 	ethereum.WaitForShutdown()
-	ethlog.Flush()
+	logger.Flush()
 }
diff --git a/cmd/mist/qml_container.go b/cmd/mist/qml_container.go
new file mode 100644
index 0000000000000000000000000000000000000000..a0a46f9b1089203b22454938f0a57ba1134c3f0a
--- /dev/null
+++ b/cmd/mist/qml_container.go
@@ -0,0 +1,85 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
+package main
+
+import (
+	"fmt"
+	"runtime"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/xeth"
+	"gopkg.in/qml.v1"
+)
+
+type QmlApplication struct {
+	win    *qml.Window
+	engine *qml.Engine
+	lib    *UiLib
+	path   string
+}
+
+func NewQmlApplication(path string, lib *UiLib) *QmlApplication {
+	engine := qml.NewEngine()
+	return &QmlApplication{engine: engine, path: path, lib: lib}
+}
+
+func (app *QmlApplication) Create() error {
+	path := string(app.path)
+
+	// For some reason for windows we get /c:/path/to/something, windows doesn't like the first slash but is fine with the others so we are removing it
+	if app.path[0] == '/' && runtime.GOOS == "windows" {
+		path = app.path[1:]
+	}
+
+	component, err := app.engine.LoadFile(path)
+	if err != nil {
+		guilogger.Warnln(err)
+	}
+	app.win = component.CreateWindow(nil)
+
+	return nil
+}
+
+func (app *QmlApplication) Destroy() {
+	app.engine.Destroy()
+}
+
+func (app *QmlApplication) NewWatcher(quitChan chan bool) {
+}
+
+// Events
+func (app *QmlApplication) NewBlock(block *types.Block) {
+	pblock := &xeth.JSBlock{Number: int(block.BlockInfo().Number), Hash: ethutil.Bytes2Hex(block.Hash())}
+	app.win.Call("onNewBlockCb", pblock)
+}
+
+func (self *QmlApplication) Messages(msgs state.Messages, id string) {
+	fmt.Println("IMPLEMENT QML APPLICATION MESSAGES METHOD")
+}
+
+// Getters
+func (app *QmlApplication) Engine() *qml.Engine {
+	return app.engine
+}
+func (app *QmlApplication) Window() *qml.Window {
+	return app.win
+}
+
+func (app *QmlApplication) Post(data string, s int) {}
diff --git a/mist/ui_lib.go b/cmd/mist/ui_lib.go
similarity index 62%
rename from mist/ui_lib.go
rename to cmd/mist/ui_lib.go
index e77336c908e9e994c95fe74db1d78050c0039782..fdbde50fd965d933739593454362812689c6bcbe 100644
--- a/mist/ui_lib.go
+++ b/cmd/mist/ui_lib.go
@@ -1,3 +1,20 @@
+// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+// MA 02110-1301  USA
+
 package main
 
 import (
@@ -7,13 +24,16 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethcrypto"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/javascript"
+	"github.com/ethereum/go-ethereum/miner"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/ui/qt"
+	"github.com/ethereum/go-ethereum/xeth"
 	"gopkg.in/qml.v1"
 )
 
@@ -24,7 +44,7 @@ type memAddr struct {
 
 // UI Library that has some basic functionality exposed
 type UiLib struct {
-	*ethpipe.JSPipe
+	*xeth.JSXEth
 	engine    *qml.Engine
 	eth       *eth.Ethereum
 	connected bool
@@ -37,21 +57,26 @@ type UiLib struct {
 	jsEngine *javascript.JSRE
 
 	filterCallbacks map[int][]int
+
+	miner *miner.Miner
 }
 
 func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
-	return &UiLib{JSPipe: ethpipe.NewJSPipe(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*ethpipe.JSFilter)}
+	lib := &UiLib{JSXEth: xeth.NewJSXEth(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*xeth.JSFilter)}
+	lib.miner = miner.New(eth.KeyManager().Address(), eth)
+
+	return lib
 }
 
 func (self *UiLib) Notef(args []interface{}) {
-	logger.Infoln(args...)
+	guilogger.Infoln(args...)
 }
 
 func (self *UiLib) LookupDomain(domain string) string {
 	world := self.World()
 
 	if len(domain) > 32 {
-		domain = string(ethcrypto.Sha3Bin([]byte(domain)))
+		domain = string(crypto.Sha3([]byte(domain)))
 	}
 	data := world.Config().Get("DnsReg").StorageString(domain).Bytes()
 
@@ -102,8 +127,11 @@ func (self *UiLib) PastPeers() *ethutil.List {
 }
 
 func (self *UiLib) ImportTx(rlpTx string) {
-	tx := ethchain.NewTransactionFromBytes(ethutil.Hex2Bytes(rlpTx))
-	self.eth.TxPool().QueueTransaction(tx)
+	tx := types.NewTransactionFromBytes(ethutil.Hex2Bytes(rlpTx))
+	err := self.eth.TxPool().Add(tx)
+	if err != nil {
+		guilogger.Infoln("import tx failed ", err)
+	}
 }
 
 func (self *UiLib) EvalJavascriptFile(path string) {
@@ -140,7 +168,7 @@ func (ui *UiLib) OpenBrowser() {
 func (ui *UiLib) Muted(content string) {
 	component, err := ui.engine.LoadFile(ui.AssetPath("qml/muted.qml"))
 	if err != nil {
-		logger.Debugln(err)
+		guilogger.Debugln(err)
 
 		return
 	}
@@ -172,7 +200,7 @@ func (ui *UiLib) AssetPath(p string) string {
 
 func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
 	dbWindow := NewDebuggerWindow(self)
-	object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.Hex2Bytes(contractHash))
+	object := self.eth.ChainManager().State().GetStateObject(ethutil.Hex2Bytes(contractHash))
 	if len(object.Code) > 0 {
 		dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Code))
 	}
@@ -193,28 +221,32 @@ func (self *UiLib) StartDebugger() {
 	dbWindow.Show()
 }
 
-func (self *UiLib) NewFilter(object map[string]interface{}) int {
-	filter, id := self.eth.InstallFilter(object)
-	filter.MessageCallback = func(messages ethstate.Messages) {
-		self.win.Root().Call("invokeFilterCallback", ethpipe.ToJSMessages(messages), id)
+func (self *UiLib) NewFilter(object map[string]interface{}) (id int) {
+	filter := qt.NewFilterFromMap(object, self.eth)
+	filter.MessageCallback = func(messages state.Messages) {
+		self.win.Root().Call("invokeFilterCallback", xeth.ToJSMessages(messages), id)
 	}
-
+	id = self.eth.InstallFilter(filter)
 	return id
 }
 
-func (self *UiLib) NewFilterString(typ string) int {
-	filter, id := self.eth.InstallFilter(nil)
-	filter.BlockCallback = func(block *ethchain.Block) {
-		self.win.Root().Call("invokeFilterCallback", "{}", id)
+func (self *UiLib) NewFilterString(typ string) (id int) {
+	filter := core.NewFilter(self.eth)
+	filter.BlockCallback = func(block *types.Block) {
+		if self.win != nil && self.win.Root() != nil {
+			self.win.Root().Call("invokeFilterCallback", "{}", id)
+		} else {
+			fmt.Println("QML is lagging")
+		}
 	}
-
+	id = self.eth.InstallFilter(filter)
 	return id
 }
 
 func (self *UiLib) Messages(id int) *ethutil.List {
 	filter := self.eth.GetFilter(id)
 	if filter != nil {
-		messages := ethpipe.ToJSMessages(filter.Find())
+		messages := xeth.ToJSMessages(filter.Find())
 
 		return messages
 	}
@@ -277,10 +309,10 @@ func mapToTxParams(object map[string]interface{}) map[string]string {
 	return conv
 }
 
-func (self *UiLib) Transact(params map[string]interface{}) (*ethpipe.JSReceipt, error) {
+func (self *UiLib) Transact(params map[string]interface{}) (string, error) {
 	object := mapToTxParams(params)
 
-	return self.JSPipe.Transact(
+	return self.JSXEth.Transact(
 		object["from"],
 		object["to"],
 		object["value"],
@@ -302,7 +334,7 @@ func (self *UiLib) Compile(code string) (string, error) {
 func (self *UiLib) Call(params map[string]interface{}) (string, error) {
 	object := mapToTxParams(params)
 
-	return self.JSPipe.Execute(
+	return self.JSXEth.Execute(
 		object["to"],
 		object["value"],
 		object["gas"],
@@ -310,3 +342,33 @@ func (self *UiLib) Call(params map[string]interface{}) (string, error) {
 		object["data"],
 	)
 }
+
+func (self *UiLib) AddLocalTransaction(to, data, gas, gasPrice, value string) int {
+	return self.miner.AddLocalTx(&miner.LocalTx{
+		To:       ethutil.Hex2Bytes(to),
+		Data:     ethutil.Hex2Bytes(data),
+		Gas:      gas,
+		GasPrice: gasPrice,
+		Value:    value,
+	}) - 1
+}
+
+func (self *UiLib) RemoveLocalTransaction(id int) {
+	self.miner.RemoveLocalTx(id)
+}
+
+func (self *UiLib) SetGasPrice(price string) {
+	self.miner.MinAcceptedGasPrice = ethutil.Big(price)
+}
+
+func (self *UiLib) ToggleMining() bool {
+	if !self.miner.Mining() {
+		self.miner.Start()
+
+		return true
+	} else {
+		self.miner.Stop()
+
+		return false
+	}
+}
diff --git a/cmd/peerserver/main.go b/cmd/peerserver/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..0fa7a9b440cd4ac434be337f1c25006d9bf5c0d8
--- /dev/null
+++ b/cmd/peerserver/main.go
@@ -0,0 +1,40 @@
+package main
+
+import (
+	"crypto/elliptic"
+	"fmt"
+	"log"
+	"net"
+	"os"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/p2p"
+)
+
+func main() {
+	logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel))
+	key, _ := crypto.GenerateKey()
+	marshaled := elliptic.Marshal(crypto.S256(), key.PublicKey.X, key.PublicKey.Y)
+
+	srv := p2p.Server{
+		MaxPeers:   10,
+		Identity:   p2p.NewSimpleClientIdentity("Ethereum(G)", "0.1", "Peer Server Two", string(marshaled)),
+		ListenAddr: ":30301",
+		NAT:        p2p.UPNP(),
+	}
+	if err := srv.Start(); err != nil {
+		fmt.Println("could not start server:", err)
+		os.Exit(1)
+	}
+
+	// add seed peers
+	seed, err := net.ResolveTCPAddr("tcp", "poc-7.ethdev.com:30300")
+	if err != nil {
+		fmt.Println("couldn't resolve:", err)
+		os.Exit(1)
+	}
+	srv.SuggestPeer(seed.IP, seed.Port, nil)
+
+	select {}
+}
diff --git a/utils/cmd.go b/cmd/utils/cmd.go
similarity index 69%
rename from utils/cmd.go
rename to cmd/utils/cmd.go
index 700542cae42ee899e7d13640b23a4ee6f51c40b1..db7bcd35eb0314224e01f5cfe29378d8f8b55b8d 100644
--- a/utils/cmd.go
+++ b/cmd/utils/cmd.go
@@ -13,18 +13,18 @@ import (
 	"time"
 
 	"bitbucket.org/kardianos/osext"
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethcrypto"
-	"github.com/ethereum/eth-go/ethdb"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethminer"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethrpc"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/eth-go/ethwire"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/miner"
+	"github.com/ethereum/go-ethereum/rpc"
+	"github.com/ethereum/go-ethereum/wire"
+	"github.com/ethereum/go-ethereum/xeth"
 )
 
-var logger = ethlog.NewLogger("CLI")
+var clilogger = logger.NewLogger("CLI")
 var interruptCallbacks = []func(os.Signal){}
 
 // Register interrupt handlers callbacks
@@ -38,7 +38,7 @@ func HandleInterrupt() {
 	go func() {
 		signal.Notify(c, os.Interrupt)
 		for sig := range c {
-			logger.Errorf("Shutting down (%v) ... \n", sig)
+			clilogger.Errorf("Shutting down (%v) ... \n", sig)
 			RunInterruptCallbacks(sig)
 		}
 	}()
@@ -100,7 +100,7 @@ func InitDataDir(Datadir string) {
 	}
 }
 
-func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string) ethlog.LogSystem {
+func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string) logger.LogSystem {
 	var writer io.Writer
 	if LogFile == "" {
 		writer = os.Stdout
@@ -108,28 +108,31 @@ func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string)
 		writer = openLogFile(Datadir, LogFile)
 	}
 
-	sys := ethlog.NewStdLogSystem(writer, log.LstdFlags, ethlog.LogLevel(LogLevel))
-	ethlog.AddLogSystem(sys)
+	sys := logger.NewStdLogSystem(writer, log.LstdFlags, logger.LogLevel(LogLevel))
+	logger.AddLogSystem(sys)
 	if DebugFile != "" {
 		writer = openLogFile(Datadir, DebugFile)
-		ethlog.AddLogSystem(ethlog.NewStdLogSystem(writer, log.LstdFlags, ethlog.DebugLevel))
+		logger.AddLogSystem(logger.NewStdLogSystem(writer, log.LstdFlags, logger.DebugLevel))
 	}
 
 	return sys
 }
 
-func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager {
+func InitConfig(vmType int, ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager {
 	InitDataDir(Datadir)
-	return ethutil.ReadConfig(ConfigFile, Datadir, EnvPrefix)
+	cfg := ethutil.ReadConfig(ConfigFile, Datadir, EnvPrefix)
+	cfg.VmType = vmType
+
+	return cfg
 }
 
 func exit(err error) {
 	status := 0
 	if err != nil {
-		logger.Errorln("Fatal: ", err)
+		clilogger.Errorln("Fatal: ", err)
 		status = 1
 	}
-	ethlog.Flush()
+	logger.Flush()
 	os.Exit(status)
 }
 
@@ -141,15 +144,14 @@ func NewDatabase() ethutil.Database {
 	return db
 }
 
-func NewClientIdentity(clientIdentifier, version, customIdentifier string) *ethwire.SimpleClientIdentity {
-	logger.Infoln("identity created")
-	return ethwire.NewSimpleClientIdentity(clientIdentifier, version, customIdentifier)
+func NewClientIdentity(clientIdentifier, version, customIdentifier string) *wire.SimpleClientIdentity {
+	return wire.NewSimpleClientIdentity(clientIdentifier, version, customIdentifier)
 }
 
-func NewEthereum(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager *ethcrypto.KeyManager, usePnp bool, OutboundPort string, MaxPeer int) *eth.Ethereum {
+func NewEthereum(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *crypto.KeyManager, usePnp bool, OutboundPort string, MaxPeer int) *eth.Ethereum {
 	ethereum, err := eth.New(db, clientIdentity, keyManager, eth.CapDefault, usePnp)
 	if err != nil {
-		logger.Fatalln("eth start err:", err)
+		clilogger.Fatalln("eth start err:", err)
 	}
 	ethereum.Port = OutboundPort
 	ethereum.MaxPeers = MaxPeer
@@ -157,26 +159,26 @@ func NewEthereum(db ethutil.Database, clientIdentity ethwire.ClientIdentity, key
 }
 
 func StartEthereum(ethereum *eth.Ethereum, UseSeed bool) {
-	logger.Infof("Starting %s", ethereum.ClientIdentity())
+	clilogger.Infof("Starting %s", ethereum.ClientIdentity())
 	ethereum.Start(UseSeed)
 	RegisterInterrupt(func(sig os.Signal) {
 		ethereum.Stop()
-		ethlog.Flush()
+		logger.Flush()
 	})
 }
 
 func ShowGenesis(ethereum *eth.Ethereum) {
-	logger.Infoln(ethereum.BlockChain().Genesis())
+	clilogger.Infoln(ethereum.ChainManager().Genesis())
 	exit(nil)
 }
 
-func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *ethcrypto.KeyManager {
-	var keyManager *ethcrypto.KeyManager
+func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *crypto.KeyManager {
+	var keyManager *crypto.KeyManager
 	switch {
 	case KeyStore == "db":
-		keyManager = ethcrypto.NewDBKeyManager(db)
+		keyManager = crypto.NewDBKeyManager(db)
 	case KeyStore == "file":
-		keyManager = ethcrypto.NewFileKeyManager(Datadir)
+		keyManager = crypto.NewFileKeyManager(Datadir)
 	default:
 		exit(fmt.Errorf("unknown keystore type: %s", KeyStore))
 	}
@@ -189,7 +191,7 @@ func DefaultAssetPath() string {
 	// assume a debug build and use the source directory as
 	// asset directory.
 	pwd, _ := os.Getwd()
-	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "mist") {
+	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist") {
 		assetPath = path.Join(pwd, "assets")
 	} else {
 		switch runtime.GOOS {
@@ -208,7 +210,7 @@ func DefaultAssetPath() string {
 	return assetPath
 }
 
-func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
+func KeyTasks(keyManager *crypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
 
 	var err error
 	switch {
@@ -237,22 +239,23 @@ func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, Se
 			exit(err)
 		}
 	}
+	clilogger.Infof("Main address %x\n", keyManager.Address())
 }
 
 func StartRpc(ethereum *eth.Ethereum, RpcPort int) {
 	var err error
-	ethereum.RpcServer, err = ethrpc.NewJsonRpcServer(ethpipe.NewJSPipe(ethereum), RpcPort)
+	ethereum.RpcServer, err = rpc.NewJsonRpcServer(xeth.NewJSXEth(ethereum), RpcPort)
 	if err != nil {
-		logger.Errorf("Could not start RPC interface (port %v): %v", RpcPort, err)
+		clilogger.Errorf("Could not start RPC interface (port %v): %v", RpcPort, err)
 	} else {
 		go ethereum.RpcServer.Start()
 	}
 }
 
-var miner *ethminer.Miner
+var gminer *miner.Miner
 
-func GetMiner() *ethminer.Miner {
-	return miner
+func GetMiner() *miner.Miner {
+	return gminer
 }
 
 func StartMining(ethereum *eth.Ethereum) bool {
@@ -261,16 +264,16 @@ func StartMining(ethereum *eth.Ethereum) bool {
 		addr := ethereum.KeyManager().Address()
 
 		go func() {
-			logger.Infoln("Start mining")
-			if miner == nil {
-				miner = ethminer.NewDefaultMiner(addr, ethereum)
+			clilogger.Infoln("Start mining")
+			if gminer == nil {
+				gminer = miner.New(addr, ethereum)
 			}
 			// Give it some time to connect with peers
 			time.Sleep(3 * time.Second)
 			for !ethereum.IsUpToDate() {
 				time.Sleep(5 * time.Second)
 			}
-			miner.Start()
+			gminer.Start()
 		}()
 		RegisterInterrupt(func(os.Signal) {
 			StopMining(ethereum)
@@ -294,9 +297,9 @@ func FormatTransactionData(data string) []byte {
 }
 
 func StopMining(ethereum *eth.Ethereum) bool {
-	if ethereum.Mining && miner != nil {
-		miner.Stop()
-		logger.Infoln("Stopped mining")
+	if ethereum.Mining && gminer != nil {
+		gminer.Stop()
+		clilogger.Infoln("Stopped mining")
 		ethereum.Mining = false
 
 		return true
@@ -307,14 +310,14 @@ func StopMining(ethereum *eth.Ethereum) bool {
 
 // Replay block
 func BlockDo(ethereum *eth.Ethereum, hash []byte) error {
-	block := ethereum.BlockChain().GetBlock(hash)
+	block := ethereum.ChainManager().GetBlock(hash)
 	if block == nil {
 		return fmt.Errorf("unknown block %x", hash)
 	}
 
-	parent := ethereum.BlockChain().GetBlock(block.PrevHash)
+	parent := ethereum.ChainManager().GetBlock(block.PrevHash)
 
-	_, err := ethereum.StateManager().ApplyDiff(parent.State(), parent, block)
+	_, err := ethereum.BlockManager().TransitionState(parent.State(), parent, block)
 	if err != nil {
 		return err
 	}
diff --git a/cmd/utils/vm_env.go b/cmd/utils/vm_env.go
new file mode 100644
index 0000000000000000000000000000000000000000..461a797c2db2e03f37170b7e4a809ad541a3ab92
--- /dev/null
+++ b/cmd/utils/vm_env.go
@@ -0,0 +1,70 @@
+package utils
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+type VMEnv struct {
+	state *state.StateDB
+	block *types.Block
+
+	transactor []byte
+	value      *big.Int
+
+	depth int
+	Gas   *big.Int
+}
+
+func NewEnv(state *state.StateDB, block *types.Block, transactor []byte, value *big.Int) *VMEnv {
+	return &VMEnv{
+		state:      state,
+		block:      block,
+		transactor: transactor,
+		value:      value,
+	}
+}
+
+func (self *VMEnv) Origin() []byte        { return self.transactor }
+func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number }
+func (self *VMEnv) PrevHash() []byte      { return self.block.PrevHash }
+func (self *VMEnv) Coinbase() []byte      { return self.block.Coinbase }
+func (self *VMEnv) Time() int64           { return self.block.Time }
+func (self *VMEnv) Difficulty() *big.Int  { return self.block.Difficulty }
+func (self *VMEnv) BlockHash() []byte     { return self.block.Hash() }
+func (self *VMEnv) Value() *big.Int       { return self.value }
+func (self *VMEnv) State() *state.StateDB { return self.state }
+func (self *VMEnv) GasLimit() *big.Int    { return self.block.GasLimit }
+func (self *VMEnv) Depth() int            { return self.depth }
+func (self *VMEnv) SetDepth(i int)        { self.depth = i }
+func (self *VMEnv) AddLog(log state.Log) {
+	self.state.AddLog(log)
+}
+func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error {
+	return vm.Transfer(from, to, amount)
+}
+
+func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution {
+	return core.NewExecution(self, addr, data, gas, price, value)
+}
+
+func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(addr, data, gas, price, value)
+	ret, err := exe.Call(addr, caller)
+	self.Gas = exe.Gas
+
+	return ret, err
+}
+func (self *VMEnv) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(caller.Address(), data, gas, price, value)
+	return exe.Call(addr, caller)
+}
+
+func (self *VMEnv) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Create(caller)
+}
diff --git a/utils/websockets.go b/cmd/utils/websockets.go
similarity index 94%
rename from utils/websockets.go
rename to cmd/utils/websockets.go
index e89331a98d6edac9a98efff24fbae9395f44c802..d3ba50e78954681bb25105f3719199f5f54204b8 100644
--- a/utils/websockets.go
+++ b/cmd/utils/websockets.go
@@ -1,10 +1,10 @@
 package utils
 
 import (
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/eth-go/websocket"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/websocket"
+	"github.com/ethereum/go-ethereum/xeth"
 )
 
 func args(v ...interface{}) []interface{} {
@@ -21,7 +21,7 @@ func NewWebSocketServer(eth *eth.Ethereum) *WebSocketServer {
 }
 
 func (self *WebSocketServer) Serv() {
-	pipe := ethpipe.NewJSPipe(self.ethereum)
+	pipe := xeth.NewJSXEth(self.ethereum)
 
 	wsServ := websocket.NewServer("/eth", ":40404")
 	wsServ.MessageFunc(func(c *websocket.Client, msg *websocket.Message) {
diff --git a/compression/rle/read_write.go b/compression/rle/read_write.go
new file mode 100644
index 0000000000000000000000000000000000000000..dde0e41ab294cde0e9a893b4f77ba4873cfa806f
--- /dev/null
+++ b/compression/rle/read_write.go
@@ -0,0 +1,84 @@
+package rle
+
+import (
+	"bytes"
+	"errors"
+
+	"github.com/ethereum/go-ethereum/crypto"
+)
+
+const (
+	token             byte = 0xfe
+	emptyShaToken          = 0xfd
+	emptyListShaToken      = 0xfe
+	tokenToken             = 0xff
+)
+
+var empty = crypto.Sha3([]byte(""))
+var emptyList = crypto.Sha3([]byte{0x80})
+
+func Decompress(dat []byte) ([]byte, error) {
+	buf := new(bytes.Buffer)
+
+	for i := 0; i < len(dat); i++ {
+		if dat[i] == token {
+			if i+1 < len(dat) {
+				switch dat[i+1] {
+				case emptyShaToken:
+					buf.Write(empty)
+				case emptyListShaToken:
+					buf.Write(emptyList)
+				case tokenToken:
+					buf.WriteByte(token)
+				default:
+					buf.Write(make([]byte, int(dat[i+1]-2)))
+				}
+				i++
+			} else {
+				return nil, errors.New("error reading bytes. token encountered without proceeding bytes")
+			}
+		} else {
+			buf.WriteByte(dat[i])
+		}
+	}
+
+	return buf.Bytes(), nil
+}
+
+func compressChunk(dat []byte) (ret []byte, n int) {
+	switch {
+	case dat[0] == token:
+		return []byte{token, tokenToken}, 1
+	case len(dat) > 1 && dat[0] == 0x0 && dat[1] == 0x0:
+		j := 0
+		for j <= 254 && j < len(dat) {
+			if dat[j] != 0 {
+				break
+			}
+			j++
+		}
+		return []byte{token, byte(j + 2)}, j
+	case len(dat) >= 32:
+		if dat[0] == empty[0] && bytes.Compare(dat[:32], empty) == 0 {
+			return []byte{token, emptyShaToken}, 32
+		} else if dat[0] == emptyList[0] && bytes.Compare(dat[:32], emptyList) == 0 {
+			return []byte{token, emptyListShaToken}, 32
+		}
+		fallthrough
+	default:
+		return dat[:1], 1
+	}
+}
+
+func Compress(dat []byte) []byte {
+	buf := new(bytes.Buffer)
+
+	i := 0
+	for i < len(dat) {
+		b, n := compressChunk(dat[i:])
+		buf.Write(b)
+		i += n
+	}
+
+	return buf.Bytes()
+}
diff --git a/compression/rle/read_write_test.go b/compression/rle/read_write_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..e6aac90936ac27a17472d7dc4c8e31164fe2021e
--- /dev/null
+++ b/compression/rle/read_write_test.go
@@ -0,0 +1,118 @@
+package rle
+
+import (
+	"testing"
+
+	checker "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { checker.TestingT(t) }
+
+type CompressionRleSuite struct{}
+
+var _ = checker.Suite(&CompressionRleSuite{})
+
+func (s *CompressionRleSuite) TestDecompressSimple(c *checker.C) {
+	exp := []byte{0xc5, 0xd2, 0x46, 0x1, 0x86, 0xf7, 0x23, 0x3c, 0x92, 0x7e, 0x7d, 0xb2, 0xdc, 0xc7, 0x3, 0xc0, 0xe5, 0x0, 0xb6, 0x53, 0xca, 0x82, 0x27, 0x3b, 0x7b, 0xfa, 0xd8, 0x4, 0x5d, 0x85, 0xa4, 0x70}
+	res, err := Decompress([]byte{token, 0xfd})
+	c.Assert(err, checker.IsNil)
+	c.Assert(res, checker.DeepEquals, exp)
+	// if bytes.Compare(res, exp) != 0 {
+	// 	t.Error("empty sha3", res)
+	// }
+
+	exp = []byte{0x56, 0xe8, 0x1f, 0x17, 0x1b, 0xcc, 0x55, 0xa6, 0xff, 0x83, 0x45, 0xe6, 0x92, 0xc0, 0xf8, 0x6e, 0x5b, 0x48, 0xe0, 0x1b, 0x99, 0x6c, 0xad, 0xc0, 0x1, 0x62, 0x2f, 0xb5, 0xe3, 0x63, 0xb4, 0x21}
+	res, err = Decompress([]byte{token, 0xfe})
+	c.Assert(err, checker.IsNil)
+	c.Assert(res, checker.DeepEquals, exp)
+	// if bytes.Compare(res, exp) != 0 {
+	// 	t.Error("0x80 sha3", res)
+	// }
+
+	res, err = Decompress([]byte{token, 0xff})
+	c.Assert(err, checker.IsNil)
+	c.Assert(res, checker.DeepEquals, []byte{token})
+	// if bytes.Compare(res, []byte{token}) != 0 {
+	// 	t.Error("token", res)
+	// }
+
+	res, err = Decompress([]byte{token, 12})
+	c.Assert(err, checker.IsNil)
+	c.Assert(res, checker.DeepEquals, make([]byte, 10))
+	// if bytes.Compare(res, make([]byte, 10)) != 0 {
+	// 	t.Error("10 * zero", res)
+	// }
+}
+
+// func TestDecompressMulti(t *testing.T) {
+// 	res, err := Decompress([]byte{token, 0xfd, token, 0xfe, token, 12})
+// 	if err != nil {
+// 		t.Error(err)
+// 	}
+
+// 	var exp []byte
+// 	exp = append(exp, crypto.Sha3([]byte(""))...)
+// 	exp = append(exp, crypto.Sha3([]byte{0x80})...)
+// 	exp = append(exp, make([]byte, 10)...)
+
+// 	if bytes.Compare(res, res) != 0 {
+// 		t.Error("Expected", exp, "result", res)
+// 	}
+// }
+
+// func TestCompressSimple(t *testing.T) {
+// 	res := Compress([]byte{0, 0, 0, 0, 0})
+// 	if bytes.Compare(res, []byte{token, 7}) != 0 {
+// 		t.Error("5 * zero", res)
+// 	}
+
+// 	res = Compress(crypto.Sha3([]byte("")))
+// 	if bytes.Compare(res, []byte{token, emptyShaToken}) != 0 {
+// 		t.Error("empty sha", res)
+// 	}
+
+// 	res = Compress(crypto.Sha3([]byte{0x80}))
+// 	if bytes.Compare(res, []byte{token, emptyListShaToken}) != 0 {
+// 		t.Error("empty list sha", res)
+// 	}
+
+// 	res = Compress([]byte{token})
+// 	if bytes.Compare(res, []byte{token, tokenToken}) != 0 {
+// 		t.Error("token", res)
+// 	}
+// }
+
+// func TestCompressMulti(t *testing.T) {
+// 	in := []byte{0, 0, 0, 0, 0}
+// 	in = append(in, crypto.Sha3([]byte(""))...)
+// 	in = append(in, crypto.Sha3([]byte{0x80})...)
+// 	in = append(in, token)
+// 	res := Compress(in)
+
+// 	exp := []byte{token, 7, token, emptyShaToken, token, emptyListShaToken, token, tokenToken}
+// 	if bytes.Compare(res, exp) != 0 {
+// 		t.Error("expected", exp, "got", res)
+// 	}
+// }
+
+// func TestCompressDecompress(t *testing.T) {
+// 	var in []byte
+
+// 	for i := 0; i < 20; i++ {
+// 		in = append(in, []byte{0, 0, 0, 0, 0}...)
+// 		in = append(in, crypto.Sha3([]byte(""))...)
+// 		in = append(in, crypto.Sha3([]byte{0x80})...)
+// 		in = append(in, []byte{123, 2, 19, 89, 245, 254, 255, token, 98, 233}...)
+// 		in = append(in, token)
+// 	}
+
+// 	c := Compress(in)
+// 	d, err := Decompress(c)
+// 	if err != nil {
+// 		t.Error(err)
+// 	}
+
+// 	if bytes.Compare(d, in) != 0 {
+// 		t.Error("multi failed\n", d, "\n", in)
+// 	}
+// }
diff --git a/core/.gitignore b/core/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f725d58d14f7d1b6a8c41c45f78b4f38f529ae9e
--- /dev/null
+++ b/core/.gitignore
@@ -0,0 +1,12 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile ~/.gitignore_global
+
+/tmp
+*/**/*un~
+*un~
+.DS_Store
+*/**/.DS_Store
+
diff --git a/core/asm.go b/core/asm.go
new file mode 100644
index 0000000000000000000000000000000000000000..a8b3023f4222b50de34ebced1daef08677d5c3b5
--- /dev/null
+++ b/core/asm.go
@@ -0,0 +1,50 @@
+package core
+
+import (
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+func Disassemble(script []byte) (asm []string) {
+	pc := new(big.Int)
+	for {
+		if pc.Cmp(big.NewInt(int64(len(script)))) >= 0 {
+			return
+		}
+
+		// Get the memory location of pc
+		val := script[pc.Int64()]
+		// Get the opcode (it must be an opcode!)
+		op := vm.OpCode(val)
+
+		asm = append(asm, fmt.Sprintf("%04v: %v", pc, op))
+
+		switch op {
+		case vm.PUSH1, vm.PUSH2, vm.PUSH3, vm.PUSH4, vm.PUSH5, vm.PUSH6, vm.PUSH7, vm.PUSH8,
+			vm.PUSH9, vm.PUSH10, vm.PUSH11, vm.PUSH12, vm.PUSH13, vm.PUSH14, vm.PUSH15,
+			vm.PUSH16, vm.PUSH17, vm.PUSH18, vm.PUSH19, vm.PUSH20, vm.PUSH21, vm.PUSH22,
+			vm.PUSH23, vm.PUSH24, vm.PUSH25, vm.PUSH26, vm.PUSH27, vm.PUSH28, vm.PUSH29,
+			vm.PUSH30, vm.PUSH31, vm.PUSH32:
+			pc.Add(pc, ethutil.Big1)
+			a := int64(op) - int64(vm.PUSH1) + 1
+			if int(pc.Int64()+a) > len(script) {
+				return
+			}
+
+			data := script[pc.Int64() : pc.Int64()+a]
+			if len(data) == 0 {
+				data = []byte{0}
+			}
+			asm = append(asm, fmt.Sprintf("%04v: 0x%x", pc, data))
+
+			pc.Add(pc, big.NewInt(a-1))
+		}
+
+		pc.Add(pc, ethutil.Big1)
+	}
+
+	return asm
+}
diff --git a/core/block_manager.go b/core/block_manager.go
new file mode 100644
index 0000000000000000000000000000000000000000..2567e39c4dfd0eeb97daafb41a888d87a41a20a9
--- /dev/null
+++ b/core/block_manager.go
@@ -0,0 +1,371 @@
+package core
+
+import (
+	"bytes"
+	"container/list"
+	"errors"
+	"fmt"
+	"math/big"
+	"sync"
+	"time"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/pow"
+	"github.com/ethereum/go-ethereum/pow/ezp"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+var statelogger = logger.NewLogger("BLOCK")
+
+type Peer interface {
+	Inbound() bool
+	LastSend() time.Time
+	LastPong() int64
+	Host() []byte
+	Port() uint16
+	Version() string
+	PingTime() string
+	Connected() *int32
+	Caps() *ethutil.Value
+}
+
+type EthManager interface {
+	BlockManager() *BlockManager
+	ChainManager() *ChainManager
+	TxPool() *TxPool
+	Broadcast(msgType wire.MsgType, data []interface{})
+	PeerCount() int
+	IsMining() bool
+	IsListening() bool
+	Peers() *list.List
+	KeyManager() *crypto.KeyManager
+	ClientIdentity() wire.ClientIdentity
+	Db() ethutil.Database
+	EventMux() *event.TypeMux
+}
+
+type BlockManager struct {
+	// Mutex for locking the block processor. Blocks can only be handled one at a time
+	mutex sync.Mutex
+	// Canonical block chain
+	bc *ChainManager
+	// non-persistent key/value memory storage
+	mem map[string]*big.Int
+	// Proof of work used for validating
+	Pow pow.PoW
+
+	txpool *TxPool
+
+	// The last attempted block is mainly used for debugging purposes
+	// This does not have to be a valid block and will be set during
+	// 'Process' & canonical validation.
+	lastAttemptedBlock *types.Block
+
+	events event.Subscription
+
+	eventMux *event.TypeMux
+}
+
+func NewBlockManager(txpool *TxPool, chainManager *ChainManager, eventMux *event.TypeMux) *BlockManager {
+	sm := &BlockManager{
+		mem:      make(map[string]*big.Int),
+		Pow:      ezp.New(),
+		bc:       chainManager,
+		eventMux: eventMux,
+		txpool:   txpool,
+	}
+
+	return sm
+}
+
+func (sm *BlockManager) TransitionState(statedb *state.StateDB, parent, block *types.Block) (receipts types.Receipts, err error) {
+	coinbase := statedb.GetOrNewStateObject(block.Coinbase)
+	coinbase.SetGasPool(block.CalcGasLimit(parent))
+
+	// Process the transactions on to current block
+	receipts, _, _, _, err = sm.ApplyTransactions(coinbase, statedb, block, block.Transactions(), false)
+	if err != nil {
+		return nil, err
+	}
+
+	return receipts, nil
+}
+
+func (self *BlockManager) ApplyTransactions(coinbase *state.StateObject, state *state.StateDB, block *types.Block, txs types.Transactions, transientProcess bool) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, error) {
+	var (
+		receipts           types.Receipts
+		handled, unhandled types.Transactions
+		erroneous          types.Transactions
+		totalUsedGas       = big.NewInt(0)
+		err                error
+		cumulativeSum      = new(big.Int)
+	)
+
+done:
+	for i, tx := range txs {
+		// If we are mining this block and validating we want to set the logs back to 0
+		state.EmptyLogs()
+
+		txGas := new(big.Int).Set(tx.Gas())
+
+		cb := state.GetStateObject(coinbase.Address())
+		st := NewStateTransition(cb, tx, state, block)
+		_, err = st.TransitionState()
+		if err != nil {
+			switch {
+			case IsNonceErr(err):
+				err = nil // ignore error
+				continue
+			case IsGasLimitErr(err):
+				unhandled = txs[i:]
+
+				break done
+			default:
+				statelogger.Infoln(err)
+				erroneous = append(erroneous, tx)
+				err = nil
+			}
+		}
+
+		txGas.Sub(txGas, st.gas)
+		cumulativeSum.Add(cumulativeSum, new(big.Int).Mul(txGas, tx.GasPrice()))
+
+		// Update the state with pending changes
+		state.Update(txGas)
+
+		cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas))
+		receipt := types.NewReceipt(state.Root(), cumulative)
+		receipt.SetLogs(state.Logs())
+		receipt.Bloom = types.CreateBloom(types.Receipts{receipt})
+		chainlogger.Debugln(receipt)
+
+		// Notify all subscribers
+		if !transientProcess {
+			go self.eventMux.Post(TxPostEvent{tx})
+		}
+
+		receipts = append(receipts, receipt)
+		handled = append(handled, tx)
+
+		if ethutil.Config.Diff && ethutil.Config.DiffType == "all" {
+			state.CreateOutputForDiff()
+		}
+	}
+
+	block.Reward = cumulativeSum
+	block.GasUsed = totalUsedGas
+
+	return receipts, handled, unhandled, erroneous, err
+}
+
+func (sm *BlockManager) Process(block *types.Block) (td *big.Int, msgs state.Messages, err error) {
+	// Processing a blocks may never happen simultaneously
+	sm.mutex.Lock()
+	defer sm.mutex.Unlock()
+
+	if sm.bc.HasBlock(block.Hash()) {
+		return nil, nil, &KnownBlockError{block.Number, block.Hash()}
+	}
+
+	if !sm.bc.HasBlock(block.PrevHash) {
+		return nil, nil, ParentError(block.PrevHash)
+	}
+	parent := sm.bc.GetBlock(block.PrevHash)
+
+	return sm.ProcessWithParent(block, parent)
+}
+
+func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.Int, messages state.Messages, err error) {
+	sm.lastAttemptedBlock = block
+
+	state := parent.State().Copy()
+
+	// Defer the Undo on the Trie. If the block processing happened
+	// we don't want to undo but since undo only happens on dirty
+	// nodes this won't happen because Commit would have been called
+	// before that.
+	defer state.Reset()
+
+	// Block validation
+	if err = sm.ValidateBlock(block, parent); err != nil {
+		return
+	}
+
+	receipts, err := sm.TransitionState(state, parent, block)
+	if err != nil {
+		return
+	}
+
+	rbloom := types.CreateBloom(receipts)
+	if bytes.Compare(rbloom, block.LogsBloom) != 0 {
+		err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
+		return
+	}
+
+	txSha := types.DeriveSha(block.Transactions())
+	if bytes.Compare(txSha, block.TxSha) != 0 {
+		err = fmt.Errorf("validating transaction root. received=%x got=%x", block.TxSha, txSha)
+		return
+	}
+
+	receiptSha := types.DeriveSha(receipts)
+	if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
+		//chainlogger.Debugf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
+		fmt.Printf("%x\n", ethutil.Encode(receipts))
+		err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
+		return
+	}
+
+	if err = sm.AccumelateRewards(state, block, parent); err != nil {
+		return
+	}
+
+	state.Update(ethutil.Big0)
+
+	if !block.State().Cmp(state) {
+		err = fmt.Errorf("invalid merkle root. received=%x got=%x", block.Root(), state.Root())
+		return
+	}
+
+	// Calculate the new total difficulty and sync back to the db
+	if td, ok := sm.CalculateTD(block); ok {
+		// Sync the current block's state to the database and cancelling out the deferred Undo
+		state.Sync()
+
+		messages := state.Manifest().Messages
+		state.Manifest().Reset()
+
+		chainlogger.Infof("Processed block #%d (%x...)\n", block.Number, block.Hash()[0:4])
+
+		sm.txpool.RemoveSet(block.Transactions())
+
+		return td, messages, nil
+	} else {
+		return nil, nil, errors.New("total diff failed")
+	}
+}
+
+func (sm *BlockManager) CalculateTD(block *types.Block) (*big.Int, bool) {
+	uncleDiff := new(big.Int)
+	for _, uncle := range block.Uncles {
+		uncleDiff = uncleDiff.Add(uncleDiff, uncle.Difficulty)
+	}
+
+	// TD(genesis_block) = 0 and TD(B) = TD(B.parent) + sum(u.difficulty for u in B.uncles) + B.difficulty
+	td := new(big.Int)
+	td = td.Add(sm.bc.Td(), uncleDiff)
+	td = td.Add(td, block.Difficulty)
+
+	// The new TD will only be accepted if the new difficulty is
+	// is greater than the previous.
+	if td.Cmp(sm.bc.Td()) > 0 {
+		return td, true
+	}
+
+	return nil, false
+}
+
+// Validates the current block. Returns an error if the block was invalid,
+// an uncle or anything that isn't on the current block chain.
+// Validation validates easy over difficult (dagger takes longer time = difficult)
+func (sm *BlockManager) ValidateBlock(block, parent *types.Block) error {
+	expd := CalcDifficulty(block, parent)
+	if expd.Cmp(block.Difficulty) < 0 {
+		return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd)
+	}
+
+	diff := block.Time - parent.Time
+	if diff < 0 {
+		return ValidationError("Block timestamp less then prev block %v (%v - %v)", diff, block.Time, sm.bc.CurrentBlock().Time)
+	}
+
+	/* XXX
+	// New blocks must be within the 15 minute range of the last block.
+	if diff > int64(15*time.Minute) {
+		return ValidationError("Block is too far in the future of last block (> 15 minutes)")
+	}
+	*/
+
+	// Verify the nonce of the block. Return an error if it's not valid
+	if !sm.Pow.Verify(block /*block.HashNoNonce(), block.Difficulty, block.Nonce*/) {
+		return ValidationError("Block's nonce is invalid (= %v)", ethutil.Bytes2Hex(block.Nonce))
+	}
+
+	return nil
+}
+
+func (sm *BlockManager) AccumelateRewards(statedb *state.StateDB, block, parent *types.Block) error {
+	reward := new(big.Int).Set(BlockReward)
+
+	knownUncles := ethutil.Set(parent.Uncles)
+	nonces := ethutil.NewSet(block.Nonce)
+	for _, uncle := range block.Uncles {
+		if nonces.Include(uncle.Nonce) {
+			// Error not unique
+			return UncleError("Uncle not unique")
+		}
+
+		uncleParent := sm.bc.GetBlock(uncle.PrevHash)
+		if uncleParent == nil {
+			return UncleError(fmt.Sprintf("Uncle's parent unknown (%x)", uncle.PrevHash[0:4]))
+		}
+
+		if uncleParent.Number.Cmp(new(big.Int).Sub(parent.Number, big.NewInt(6))) < 0 {
+			return UncleError("Uncle too old")
+		}
+
+		if knownUncles.Include(uncle.Hash()) {
+			return UncleError("Uncle in chain")
+		}
+
+		nonces.Insert(uncle.Nonce)
+
+		r := new(big.Int)
+		r.Mul(BlockReward, big.NewInt(15)).Div(r, big.NewInt(16))
+
+		uncleAccount := statedb.GetAccount(uncle.Coinbase)
+		uncleAccount.AddAmount(r)
+
+		reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32)))
+	}
+
+	// Get the account associated with the coinbase
+	account := statedb.GetAccount(block.Coinbase)
+	// Reward amount of ether to the coinbase address
+	account.AddAmount(reward)
+
+	statedb.Manifest().AddMessage(&state.Message{
+		To:     block.Coinbase,
+		Input:  nil,
+		Origin: nil,
+		Block:  block.Hash(), Timestamp: block.Time, Coinbase: block.Coinbase, Number: block.Number,
+		Value: new(big.Int).Add(reward, block.Reward),
+	})
+
+	return nil
+}
+
+func (sm *BlockManager) GetMessages(block *types.Block) (messages []*state.Message, err error) {
+	if !sm.bc.HasBlock(block.PrevHash) {
+		return nil, ParentError(block.PrevHash)
+	}
+
+	sm.lastAttemptedBlock = block
+
+	var (
+		parent = sm.bc.GetBlock(block.PrevHash)
+		state  = parent.State().Copy()
+	)
+
+	defer state.Reset()
+
+	sm.TransitionState(state, parent, block)
+	sm.AccumelateRewards(state, block, parent)
+
+	return state.Manifest().Messages, nil
+}
diff --git a/core/chain_manager.go b/core/chain_manager.go
new file mode 100644
index 0000000000000000000000000000000000000000..794ae001192e0302025d3142b0cd6c20f599f95b
--- /dev/null
+++ b/core/chain_manager.go
@@ -0,0 +1,355 @@
+package core
+
+import (
+	"fmt"
+	"math/big"
+	"sync"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+var chainlogger = logger.NewLogger("CHAIN")
+
+func AddTestNetFunds(block *types.Block) {
+	for _, addr := range []string{
+		"51ba59315b3a95761d0863b05ccc7a7f54703d99",
+		"e4157b34ea9615cfbde6b4fda419828124b70c78",
+		"b9c015918bdaba24b4ff057a92a3873d6eb201be",
+		"6c386a4b26f73c802f34673f7248bb118f97424a",
+		"cd2a3d9f938e13cd947ec05abc7fe734df8dd826",
+		"2ef47100e0787b915105fd5e3f4ff6752079d5cb",
+		"e6716f9544a56c530d868e4bfbacb172315bdead",
+		"1a26338f0d905e295fccb71fa9ea849ffa12aaf4",
+	} {
+		codedAddr := ethutil.Hex2Bytes(addr)
+		account := block.State().GetAccount(codedAddr)
+		account.SetBalance(ethutil.Big("1606938044258990275541962092341162602522202993782792835301376")) //ethutil.BigPow(2, 200)
+		block.State().UpdateStateObject(account)
+	}
+}
+
+func CalcDifficulty(block, parent *types.Block) *big.Int {
+	diff := new(big.Int)
+
+	adjust := new(big.Int).Rsh(parent.Difficulty, 10)
+	if block.Time >= parent.Time+5 {
+		diff.Sub(parent.Difficulty, adjust)
+	} else {
+		diff.Add(parent.Difficulty, adjust)
+	}
+
+	return diff
+}
+
+type ChainManager struct {
+	//eth          EthManager
+	processor    types.BlockProcessor
+	eventMux     *event.TypeMux
+	genesisBlock *types.Block
+	// Last known total difficulty
+	mu              sync.RWMutex
+	td              *big.Int
+	lastBlockNumber uint64
+	currentBlock    *types.Block
+	lastBlockHash   []byte
+
+	transState *state.StateDB
+}
+
+func (self *ChainManager) Td() *big.Int {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	return self.td
+}
+
+func (self *ChainManager) LastBlockNumber() uint64 {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	return self.lastBlockNumber
+}
+
+func (self *ChainManager) LastBlockHash() []byte {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	return self.lastBlockHash
+}
+
+func (self *ChainManager) CurrentBlock() *types.Block {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	return self.currentBlock
+}
+
+func NewChainManager(mux *event.TypeMux) *ChainManager {
+	bc := &ChainManager{}
+	bc.genesisBlock = types.NewBlockFromBytes(ethutil.Encode(Genesis))
+	bc.eventMux = mux
+
+	bc.setLastBlock()
+
+	bc.transState = bc.State().Copy()
+
+	return bc
+}
+
+func (self *ChainManager) SetProcessor(proc types.BlockProcessor) {
+	self.processor = proc
+}
+
+func (self *ChainManager) State() *state.StateDB {
+	return self.CurrentBlock().State()
+}
+
+func (self *ChainManager) TransState() *state.StateDB {
+	return self.transState
+}
+
+func (bc *ChainManager) setLastBlock() {
+	data, _ := ethutil.Config.Db.Get([]byte("LastBlock"))
+	if len(data) != 0 {
+		// Prep genesis
+		AddTestNetFunds(bc.genesisBlock)
+
+		block := types.NewBlockFromBytes(data)
+		bc.currentBlock = block
+		bc.lastBlockHash = block.Hash()
+		bc.lastBlockNumber = block.Number.Uint64()
+
+		// Set the last know difficulty (might be 0x0 as initial value, Genesis)
+		bc.td = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
+	} else {
+		bc.Reset()
+	}
+
+	chainlogger.Infof("Last block (#%d) %x\n", bc.lastBlockNumber, bc.currentBlock.Hash())
+}
+
+// Block creation & chain handling
+func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block {
+	bc.mu.RLock()
+	defer bc.mu.RUnlock()
+
+	var root interface{}
+	hash := ZeroHash256
+
+	if bc.CurrentBlock != nil {
+		root = bc.currentBlock.Root()
+		hash = bc.lastBlockHash
+	}
+
+	block := types.CreateBlock(
+		root,
+		hash,
+		coinbase,
+		ethutil.BigPow(2, 32),
+		nil,
+		"")
+
+	parent := bc.currentBlock
+	if parent != nil {
+		block.Difficulty = CalcDifficulty(block, parent)
+		block.Number = new(big.Int).Add(bc.currentBlock.Number, ethutil.Big1)
+		block.GasLimit = block.CalcGasLimit(bc.currentBlock)
+
+	}
+
+	return block
+}
+
+func (bc *ChainManager) Reset() {
+	bc.mu.Lock()
+	defer bc.mu.Unlock()
+
+	AddTestNetFunds(bc.genesisBlock)
+
+	bc.genesisBlock.Trie().Sync()
+	// Prepare the genesis block
+	bc.write(bc.genesisBlock)
+	bc.insert(bc.genesisBlock)
+	bc.currentBlock = bc.genesisBlock
+
+	bc.setTotalDifficulty(ethutil.Big("0"))
+
+	// Set the last know difficulty (might be 0x0 as initial value, Genesis)
+	bc.td = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
+}
+
+func (self *ChainManager) Export() []byte {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	chainlogger.Infof("exporting %v blocks...\n", self.currentBlock.Number)
+
+	blocks := make([]*types.Block, int(self.currentBlock.Number.Int64())+1)
+	for block := self.currentBlock; block != nil; block = self.GetBlock(block.PrevHash) {
+		blocks[block.Number.Int64()] = block
+	}
+
+	return ethutil.Encode(blocks)
+}
+
+func (bc *ChainManager) insert(block *types.Block) {
+	encodedBlock := block.RlpEncode()
+	ethutil.Config.Db.Put([]byte("LastBlock"), encodedBlock)
+	bc.currentBlock = block
+	bc.lastBlockHash = block.Hash()
+}
+
+func (bc *ChainManager) write(block *types.Block) {
+	bc.writeBlockInfo(block)
+
+	encodedBlock := block.RlpEncode()
+	ethutil.Config.Db.Put(block.Hash(), encodedBlock)
+}
+
+// Accessors
+func (bc *ChainManager) Genesis() *types.Block {
+	return bc.genesisBlock
+}
+
+// Block fetching methods
+func (bc *ChainManager) HasBlock(hash []byte) bool {
+	data, _ := ethutil.Config.Db.Get(hash)
+	return len(data) != 0
+}
+
+func (self *ChainManager) GetChainHashesFromHash(hash []byte, max uint64) (chain [][]byte) {
+	block := self.GetBlock(hash)
+	if block == nil {
+		return
+	}
+
+	// XXX Could be optimised by using a different database which only holds hashes (i.e., linked list)
+	for i := uint64(0); i < max; i++ {
+		chain = append(chain, block.Hash())
+
+		if block.Number.Cmp(ethutil.Big0) <= 0 {
+			break
+		}
+
+		block = self.GetBlock(block.PrevHash)
+	}
+
+	return
+}
+
+func (self *ChainManager) GetBlock(hash []byte) *types.Block {
+	data, _ := ethutil.Config.Db.Get(hash)
+	if len(data) == 0 {
+		return nil
+	}
+
+	return types.NewBlockFromBytes(data)
+}
+
+func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block {
+	self.mu.RLock()
+	defer self.mu.RUnlock()
+
+	block := self.currentBlock
+	for ; block != nil; block = self.GetBlock(block.PrevHash) {
+		if block.Number.Uint64() == num {
+			break
+		}
+	}
+
+	if block != nil && block.Number.Uint64() == 0 && num != 0 {
+		return nil
+	}
+
+	return block
+}
+
+func (bc *ChainManager) setTotalDifficulty(td *big.Int) {
+	ethutil.Config.Db.Put([]byte("LTD"), td.Bytes())
+	bc.td = td
+}
+
+func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error) {
+	parent := self.GetBlock(block.PrevHash)
+	if parent == nil {
+		return nil, fmt.Errorf("Unable to calculate total diff without known parent %x", block.PrevHash)
+	}
+
+	parentTd := parent.BlockInfo().TD
+
+	uncleDiff := new(big.Int)
+	for _, uncle := range block.Uncles {
+		uncleDiff = uncleDiff.Add(uncleDiff, uncle.Difficulty)
+	}
+
+	td := new(big.Int)
+	td = td.Add(parentTd, uncleDiff)
+	td = td.Add(td, block.Difficulty)
+
+	return td, nil
+}
+
+func (bc *ChainManager) BlockInfo(block *types.Block) types.BlockInfo {
+	bi := types.BlockInfo{}
+	data, _ := ethutil.Config.Db.Get(append(block.Hash(), []byte("Info")...))
+	bi.RlpDecode(data)
+
+	return bi
+}
+
+// Unexported method for writing extra non-essential block info to the db
+func (bc *ChainManager) writeBlockInfo(block *types.Block) {
+	bc.lastBlockNumber++
+	bi := types.BlockInfo{Number: bc.lastBlockNumber, Hash: block.Hash(), Parent: block.PrevHash, TD: bc.td}
+
+	// For now we use the block hash with the words "info" appended as key
+	ethutil.Config.Db.Put(append(block.Hash(), []byte("Info")...), bi.RlpEncode())
+}
+
+func (bc *ChainManager) Stop() {
+	if bc.CurrentBlock != nil {
+		chainlogger.Infoln("Stopped")
+	}
+}
+
+func (self *ChainManager) InsertChain(chain types.Blocks) error {
+	for _, block := range chain {
+		td, messages, err := self.processor.Process(block)
+		if err != nil {
+			if IsKnownBlockErr(err) {
+				continue
+			}
+
+			chainlogger.Infof("block #%v process failed (%x)\n", block.Number, block.Hash()[:4])
+			chainlogger.Infoln(block)
+			chainlogger.Infoln(err)
+			return err
+		}
+
+		self.mu.Lock()
+		{
+
+			self.write(block)
+			if td.Cmp(self.td) > 0 {
+				if block.Number.Cmp(new(big.Int).Add(self.currentBlock.Number, ethutil.Big1)) < 0 {
+					chainlogger.Infof("Split detected. New head #%v (%x), was #%v (%x)\n", block.Number, block.Hash()[:4], self.currentBlock.Number, self.currentBlock.Hash()[:4])
+				}
+
+				self.setTotalDifficulty(td)
+				self.insert(block)
+				self.transState = self.currentBlock.State().Copy()
+			}
+
+		}
+		self.mu.Unlock()
+
+		self.eventMux.Post(NewBlockEvent{block})
+		self.eventMux.Post(messages)
+	}
+
+	return nil
+}
diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..52be8b0eab01313e8efc22b5e3c6b804d8a67785
--- /dev/null
+++ b/core/chain_manager_test.go
@@ -0,0 +1,77 @@
+package core
+
+import (
+	"fmt"
+	"path"
+	"runtime"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	//logpkg "github.com/ethereum/go-ethereum/logger"
+)
+
+//var Logger logpkg.LogSystem
+//var Log = logpkg.NewLogger("TEST")
+
+func init() {
+	runtime.GOMAXPROCS(runtime.NumCPU())
+	//Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.InfoLevel)
+	//logpkg.AddLogSystem(Logger)
+
+	ethutil.ReadConfig("/tmp/ethtest", "/tmp/ethtest", "ETH")
+
+	db, err := ethdb.NewMemDatabase()
+	if err != nil {
+		panic("Could not create mem-db, failing")
+	}
+	ethutil.Config.Db = db
+}
+
+func loadChain(fn string, t *testing.T) types.Blocks {
+	c1, err := ethutil.ReadAllFile(path.Join("..", "_data", fn))
+	if err != nil {
+		fmt.Println(err)
+		t.FailNow()
+	}
+	value := ethutil.NewValueFromBytes([]byte(c1))
+	blocks := make(types.Blocks, value.Len())
+	it := value.NewIterator()
+	for it.Next() {
+		blocks[it.Idx()] = types.NewBlockFromRlpValue(it.Value())
+	}
+
+	return blocks
+}
+
+func insertChain(done chan bool, chainMan *ChainManager, chain types.Blocks, t *testing.T) {
+	err := chainMan.InsertChain(chain)
+	if err != nil {
+		fmt.Println(err)
+		t.FailNow()
+	}
+	done <- true
+}
+
+func TestChainInsertions(t *testing.T) {
+	chain1 := loadChain("chain1", t)
+	chain2 := loadChain("chain2", t)
+	var eventMux event.TypeMux
+	chainMan := NewChainManager(&eventMux)
+	txPool := NewTxPool(chainMan, nil, &eventMux)
+	blockMan := NewBlockManager(txPool, chainMan, &eventMux)
+	chainMan.SetProcessor(blockMan)
+
+	const max = 2
+	done := make(chan bool, max)
+
+	go insertChain(done, chainMan, chain1, t)
+	go insertChain(done, chainMan, chain2, t)
+
+	for i := 0; i < max; i++ {
+		<-done
+	}
+	fmt.Println(chainMan.CurrentBlock())
+}
diff --git a/core/dagger.go b/core/dagger.go
new file mode 100644
index 0000000000000000000000000000000000000000..3039d89959998b521d1d747764d0c451df8684c2
--- /dev/null
+++ b/core/dagger.go
@@ -0,0 +1,160 @@
+package core
+
+import (
+	"hash"
+	"math/big"
+	"math/rand"
+	"time"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/obscuren/sha3"
+)
+
+var powlogger = logger.NewLogger("POW")
+
+type Dagger struct {
+	hash *big.Int
+	xn   *big.Int
+}
+
+var Found bool
+
+func (dag *Dagger) Find(obj *big.Int, resChan chan int64) {
+	r := rand.New(rand.NewSource(time.Now().UnixNano()))
+
+	for i := 0; i < 1000; i++ {
+		rnd := r.Int63()
+
+		res := dag.Eval(big.NewInt(rnd))
+		powlogger.Infof("rnd %v\nres %v\nobj %v\n", rnd, res, obj)
+		if res.Cmp(obj) < 0 {
+			// Post back result on the channel
+			resChan <- rnd
+			// Notify other threads we've found a valid nonce
+			Found = true
+		}
+
+		// Break out if found
+		if Found {
+			break
+		}
+	}
+
+	resChan <- 0
+}
+
+func (dag *Dagger) Search(hash, diff *big.Int) *big.Int {
+	// TODO fix multi threading. Somehow it results in the wrong nonce
+	amountOfRoutines := 1
+
+	dag.hash = hash
+
+	obj := ethutil.BigPow(2, 256)
+	obj = obj.Div(obj, diff)
+
+	Found = false
+	resChan := make(chan int64, 3)
+	var res int64
+
+	for k := 0; k < amountOfRoutines; k++ {
+		go dag.Find(obj, resChan)
+
+		// Wait for each go routine to finish
+	}
+	for k := 0; k < amountOfRoutines; k++ {
+		// Get the result from the channel. 0 = quit
+		if r := <-resChan; r != 0 {
+			res = r
+		}
+	}
+
+	return big.NewInt(res)
+}
+
+func (dag *Dagger) Verify(hash, diff, nonce *big.Int) bool {
+	dag.hash = hash
+
+	obj := ethutil.BigPow(2, 256)
+	obj = obj.Div(obj, diff)
+
+	return dag.Eval(nonce).Cmp(obj) < 0
+}
+
+func DaggerVerify(hash, diff, nonce *big.Int) bool {
+	dagger := &Dagger{}
+	dagger.hash = hash
+
+	obj := ethutil.BigPow(2, 256)
+	obj = obj.Div(obj, diff)
+
+	return dagger.Eval(nonce).Cmp(obj) < 0
+}
+
+func (dag *Dagger) Node(L uint64, i uint64) *big.Int {
+	if L == i {
+		return dag.hash
+	}
+
+	var m *big.Int
+	if L == 9 {
+		m = big.NewInt(16)
+	} else {
+		m = big.NewInt(3)
+	}
+
+	sha := sha3.NewKeccak256()
+	sha.Reset()
+	d := sha3.NewKeccak256()
+	b := new(big.Int)
+	ret := new(big.Int)
+
+	for k := 0; k < int(m.Uint64()); k++ {
+		d.Reset()
+		d.Write(dag.hash.Bytes())
+		d.Write(dag.xn.Bytes())
+		d.Write(big.NewInt(int64(L)).Bytes())
+		d.Write(big.NewInt(int64(i)).Bytes())
+		d.Write(big.NewInt(int64(k)).Bytes())
+
+		b.SetBytes(Sum(d))
+		pk := b.Uint64() & ((1 << ((L - 1) * 3)) - 1)
+		sha.Write(dag.Node(L-1, pk).Bytes())
+	}
+
+	ret.SetBytes(Sum(sha))
+
+	return ret
+}
+
+func Sum(sha hash.Hash) []byte {
+	//in := make([]byte, 32)
+	return sha.Sum(nil)
+}
+
+func (dag *Dagger) Eval(N *big.Int) *big.Int {
+	pow := ethutil.BigPow(2, 26)
+	dag.xn = pow.Div(N, pow)
+
+	sha := sha3.NewKeccak256()
+	sha.Reset()
+	ret := new(big.Int)
+
+	for k := 0; k < 4; k++ {
+		d := sha3.NewKeccak256()
+		b := new(big.Int)
+
+		d.Reset()
+		d.Write(dag.hash.Bytes())
+		d.Write(dag.xn.Bytes())
+		d.Write(N.Bytes())
+		d.Write(big.NewInt(int64(k)).Bytes())
+
+		b.SetBytes(Sum(d))
+		pk := (b.Uint64() & 0x1ffffff)
+
+		sha.Write(dag.Node(9, pk).Bytes())
+	}
+
+	return ret.SetBytes(Sum(sha))
+}
diff --git a/core/dagger_test.go b/core/dagger_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..e80064e6bf4cd809f401756a65caade10820dba7
--- /dev/null
+++ b/core/dagger_test.go
@@ -0,0 +1,19 @@
+package core
+
+import (
+	"math/big"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func BenchmarkDaggerSearch(b *testing.B) {
+	hash := big.NewInt(0)
+	diff := ethutil.BigPow(2, 36)
+	o := big.NewInt(0) // nonce doesn't matter. We're only testing against speed, not validity
+
+	// Reset timer so the big generation isn't included in the benchmark
+	b.ResetTimer()
+	// Validate
+	DaggerVerify(hash, diff, o)
+}
diff --git a/core/error.go b/core/error.go
new file mode 100644
index 0000000000000000000000000000000000000000..11d8c1653769b8497bdc0ddd67f96800b78bcf9d
--- /dev/null
+++ b/core/error.go
@@ -0,0 +1,141 @@
+package core
+
+import (
+	"fmt"
+	"math/big"
+)
+
+// Parent error. In case a parent is unknown this error will be thrown
+// by the block manager
+type ParentErr struct {
+	Message string
+}
+
+func (err *ParentErr) Error() string {
+	return err.Message
+}
+
+func ParentError(hash []byte) error {
+	return &ParentErr{Message: fmt.Sprintf("Block's parent unkown %x", hash)}
+}
+
+func IsParentErr(err error) bool {
+	_, ok := err.(*ParentErr)
+
+	return ok
+}
+
+type UncleErr struct {
+	Message string
+}
+
+func (err *UncleErr) Error() string {
+	return err.Message
+}
+
+func UncleError(str string) error {
+	return &UncleErr{Message: str}
+}
+
+func IsUncleErr(err error) bool {
+	_, ok := err.(*UncleErr)
+
+	return ok
+}
+
+// Block validation error. If any validation fails, this error will be thrown
+type ValidationErr struct {
+	Message string
+}
+
+func (err *ValidationErr) Error() string {
+	return err.Message
+}
+
+func ValidationError(format string, v ...interface{}) *ValidationErr {
+	return &ValidationErr{Message: fmt.Sprintf(format, v...)}
+}
+
+func IsValidationErr(err error) bool {
+	_, ok := err.(*ValidationErr)
+
+	return ok
+}
+
+type GasLimitErr struct {
+	Message string
+	Is, Max *big.Int
+}
+
+func IsGasLimitErr(err error) bool {
+	_, ok := err.(*GasLimitErr)
+
+	return ok
+}
+func (err *GasLimitErr) Error() string {
+	return err.Message
+}
+func GasLimitError(is, max *big.Int) *GasLimitErr {
+	return &GasLimitErr{Message: fmt.Sprintf("GasLimit error. Max %s, transaction would take it to %s", max, is), Is: is, Max: max}
+}
+
+type NonceErr struct {
+	Message string
+	Is, Exp uint64
+}
+
+func (err *NonceErr) Error() string {
+	return err.Message
+}
+
+func NonceError(is, exp uint64) *NonceErr {
+	return &NonceErr{Message: fmt.Sprintf("Nonce err. Is %d, expected %d", is, exp), Is: is, Exp: exp}
+}
+
+func IsNonceErr(err error) bool {
+	_, ok := err.(*NonceErr)
+
+	return ok
+}
+
+type OutOfGasErr struct {
+	Message string
+}
+
+func OutOfGasError() *OutOfGasErr {
+	return &OutOfGasErr{Message: "Out of gas"}
+}
+func (self *OutOfGasErr) Error() string {
+	return self.Message
+}
+
+func IsOutOfGasErr(err error) bool {
+	_, ok := err.(*OutOfGasErr)
+
+	return ok
+}
+
+type TDError struct {
+	a, b *big.Int
+}
+
+func (self *TDError) Error() string {
+	return fmt.Sprintf("incoming chain has a lower or equal TD (%v <= %v)", self.a, self.b)
+}
+func IsTDError(e error) bool {
+	_, ok := e.(*TDError)
+	return ok
+}
+
+type KnownBlockError struct {
+	number *big.Int
+	hash   []byte
+}
+
+func (self *KnownBlockError) Error() string {
+	return fmt.Sprintf("block %v already known (%x)", self.number, self.hash[0:4])
+}
+func IsKnownBlockErr(e error) bool {
+	_, ok := e.(*KnownBlockError)
+	return ok
+}
diff --git a/core/events.go b/core/events.go
new file mode 100644
index 0000000000000000000000000000000000000000..deeba3e98299aadf8bbe6751e3c93fcebae6edbb
--- /dev/null
+++ b/core/events.go
@@ -0,0 +1,12 @@
+package core
+
+import "github.com/ethereum/go-ethereum/core/types"
+
+// TxPreEvent is posted when a transaction enters the transaction pool.
+type TxPreEvent struct{ Tx *types.Transaction }
+
+// TxPostEvent is posted when a transaction has been processed.
+type TxPostEvent struct{ Tx *types.Transaction }
+
+// NewBlockEvent is posted when a block has been imported.
+type NewBlockEvent struct{ Block *types.Block }
diff --git a/core/execution.go b/core/execution.go
new file mode 100644
index 0000000000000000000000000000000000000000..b7eead0dd3d0d7508cc5dcc01d3e63d70160a2f6
--- /dev/null
+++ b/core/execution.go
@@ -0,0 +1,71 @@
+package core
+
+import (
+	"fmt"
+	"math/big"
+	"time"
+
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+type Execution struct {
+	env               vm.Environment
+	address, input    []byte
+	Gas, price, value *big.Int
+	SkipTransfer      bool
+}
+
+func NewExecution(env vm.Environment, address, input []byte, gas, gasPrice, value *big.Int) *Execution {
+	return &Execution{env: env, address: address, input: input, Gas: gas, price: gasPrice, value: value}
+}
+
+func (self *Execution) Addr() []byte {
+	return self.address
+}
+
+func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, error) {
+	// Retrieve the executing code
+	code := self.env.State().GetCode(codeAddr)
+
+	return self.exec(code, codeAddr, caller)
+}
+
+func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret []byte, err error) {
+	env := self.env
+	evm := vm.New(env, vm.DebugVmTy)
+
+	if env.Depth() == vm.MaxCallDepth {
+		// Consume all gas (by not returning it) and return a depth error
+		return nil, vm.DepthError{}
+	}
+
+	from, to := env.State().GetStateObject(caller.Address()), env.State().GetOrNewStateObject(self.address)
+	// Skipping transfer is used on testing for the initial call
+	if !self.SkipTransfer {
+		err = env.Transfer(from, to, self.value)
+		if err != nil {
+			caller.ReturnGas(self.Gas, self.price)
+
+			err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance)
+			return
+		}
+	}
+
+	snapshot := env.State().Copy()
+	start := time.Now()
+	ret, err = evm.Run(to, caller, code, self.value, self.Gas, self.price, self.input)
+	if err != nil {
+		env.State().Set(snapshot)
+	}
+	chainlogger.Debugf("vm took %v\n", time.Since(start))
+
+	return
+}
+
+func (self *Execution) Create(caller vm.ClosureRef) (ret []byte, err error, account *state.StateObject) {
+	ret, err = self.exec(self.input, nil, caller)
+	account = self.env.State().GetStateObject(self.address)
+
+	return
+}
diff --git a/core/fees.go b/core/fees.go
new file mode 100644
index 0000000000000000000000000000000000000000..bbce01b84b7a25bf3e1aaa5172a54083fd59d4de
--- /dev/null
+++ b/core/fees.go
@@ -0,0 +1,7 @@
+package core
+
+import (
+	"math/big"
+)
+
+var BlockReward *big.Int = big.NewInt(1.5e+18)
diff --git a/core/filter.go b/core/filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..fb992782df55f2495e4857f02434fa70f0157220
--- /dev/null
+++ b/core/filter.go
@@ -0,0 +1,200 @@
+package core
+
+import (
+	"bytes"
+	"math"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type AccountChange struct {
+	Address, StateAddress []byte
+}
+
+// Filtering interface
+type Filter struct {
+	eth      EthManager
+	earliest int64
+	latest   int64
+	skip     int
+	from, to [][]byte
+	max      int
+
+	Altered []AccountChange
+
+	BlockCallback   func(*types.Block)
+	MessageCallback func(state.Messages)
+}
+
+// Create a new filter which uses a bloom filter on blocks to figure out whether a particular block
+// is interesting or not.
+func NewFilter(eth EthManager) *Filter {
+	return &Filter{eth: eth}
+}
+
+func (self *Filter) AddAltered(address, stateAddress []byte) {
+	self.Altered = append(self.Altered, AccountChange{address, stateAddress})
+}
+
+// Set the earliest and latest block for filtering.
+// -1 = latest block (i.e., the current block)
+// hash = particular hash from-to
+func (self *Filter) SetEarliestBlock(earliest int64) {
+	self.earliest = earliest
+}
+
+func (self *Filter) SetLatestBlock(latest int64) {
+	self.latest = latest
+}
+
+func (self *Filter) SetFrom(addr [][]byte) {
+	self.from = addr
+}
+
+func (self *Filter) AddFrom(addr []byte) {
+	self.from = append(self.from, addr)
+}
+
+func (self *Filter) SetTo(addr [][]byte) {
+	self.to = addr
+}
+
+func (self *Filter) AddTo(addr []byte) {
+	self.to = append(self.to, addr)
+}
+
+func (self *Filter) SetMax(max int) {
+	self.max = max
+}
+
+func (self *Filter) SetSkip(skip int) {
+	self.skip = skip
+}
+
+// Run filters messages with the current parameters set
+func (self *Filter) Find() []*state.Message {
+	var earliestBlockNo uint64 = uint64(self.earliest)
+	if self.earliest == -1 {
+		earliestBlockNo = self.eth.ChainManager().CurrentBlock().Number.Uint64()
+	}
+	var latestBlockNo uint64 = uint64(self.latest)
+	if self.latest == -1 {
+		latestBlockNo = self.eth.ChainManager().CurrentBlock().Number.Uint64()
+	}
+
+	var (
+		messages []*state.Message
+		block    = self.eth.ChainManager().GetBlockByNumber(latestBlockNo)
+		quit     bool
+	)
+	for i := 0; !quit && block != nil; i++ {
+		// Quit on latest
+		switch {
+		case block.Number.Uint64() == earliestBlockNo, block.Number.Uint64() == 0:
+			quit = true
+		case self.max <= len(messages):
+			break
+		}
+
+		// Use bloom filtering to see if this block is interesting given the
+		// current parameters
+		if self.bloomFilter(block) {
+			// Get the messages of the block
+			msgs, err := self.eth.BlockManager().GetMessages(block)
+			if err != nil {
+				chainlogger.Warnln("err: filter get messages ", err)
+
+				break
+			}
+
+			messages = append(messages, self.FilterMessages(msgs)...)
+		}
+
+		block = self.eth.ChainManager().GetBlock(block.PrevHash)
+	}
+
+	skip := int(math.Min(float64(len(messages)), float64(self.skip)))
+
+	return messages[skip:]
+}
+
+func includes(addresses [][]byte, a []byte) (found bool) {
+	for _, addr := range addresses {
+		if bytes.Compare(addr, a) == 0 {
+			return true
+		}
+	}
+
+	return
+}
+
+func (self *Filter) FilterMessages(msgs []*state.Message) []*state.Message {
+	var messages []*state.Message
+
+	// Filter the messages for interesting stuff
+	for _, message := range msgs {
+		if len(self.to) > 0 && !includes(self.to, message.To) {
+			continue
+		}
+
+		if len(self.from) > 0 && !includes(self.from, message.From) {
+			continue
+		}
+
+		var match bool
+		if len(self.Altered) == 0 {
+			match = true
+		}
+
+		for _, accountChange := range self.Altered {
+			if len(accountChange.Address) > 0 && bytes.Compare(message.To, accountChange.Address) != 0 {
+				continue
+			}
+
+			if len(accountChange.StateAddress) > 0 && !includes(message.ChangedAddresses, accountChange.StateAddress) {
+				continue
+			}
+
+			match = true
+			break
+		}
+
+		if !match {
+			continue
+		}
+
+		messages = append(messages, message)
+	}
+
+	return messages
+}
+
+func (self *Filter) bloomFilter(block *types.Block) bool {
+	var fromIncluded, toIncluded bool
+	if len(self.from) > 0 {
+		for _, from := range self.from {
+			if types.BloomLookup(block.LogsBloom, from) || bytes.Equal(block.Coinbase, from) {
+				fromIncluded = true
+				break
+			}
+		}
+	} else {
+		fromIncluded = true
+	}
+
+	if len(self.to) > 0 {
+		for _, to := range self.to {
+			if types.BloomLookup(block.LogsBloom, ethutil.U256(new(big.Int).Add(ethutil.Big1, ethutil.BigD(to))).Bytes()) || bytes.Equal(block.Coinbase, to) {
+				toIncluded = true
+				break
+			}
+		}
+	} else {
+		toIncluded = true
+	}
+
+	return fromIncluded && toIncluded
+}
diff --git a/core/filter_test.go b/core/filter_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..9a8bc9592b0bcef7115b5159d4f426ba4fbd39f8
--- /dev/null
+++ b/core/filter_test.go
@@ -0,0 +1 @@
+package core
diff --git a/core/genesis.go b/core/genesis.go
new file mode 100644
index 0000000000000000000000000000000000000000..707154759a08c6d157c31cd4d6916283e9fc202e
--- /dev/null
+++ b/core/genesis.go
@@ -0,0 +1,52 @@
+package core
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+/*
+ * This is the special genesis block.
+ */
+
+var ZeroHash256 = make([]byte, 32)
+var ZeroHash160 = make([]byte, 20)
+var ZeroHash512 = make([]byte, 64)
+var EmptyShaList = crypto.Sha3(ethutil.Encode([]interface{}{}))
+var EmptyListRoot = crypto.Sha3(ethutil.Encode(""))
+
+var GenesisHeader = []interface{}{
+	// Previous hash (none)
+	ZeroHash256,
+	// Empty uncles
+	EmptyShaList,
+	// Coinbase
+	ZeroHash160,
+	// Root state
+	EmptyShaList,
+	// tx root
+	EmptyListRoot,
+	// receipt root
+	EmptyListRoot,
+	// bloom
+	ZeroHash512,
+	// Difficulty
+	//ethutil.BigPow(2, 22),
+	big.NewInt(131072),
+	// Number
+	ethutil.Big0,
+	// Block upper gas bound
+	big.NewInt(1000000),
+	// Block gas used
+	ethutil.Big0,
+	// Time
+	ethutil.Big0,
+	// Extra
+	nil,
+	// Nonce
+	crypto.Sha3(big.NewInt(42).Bytes()),
+}
+
+var Genesis = []interface{}{GenesisHeader, []interface{}{}, []interface{}{}}
diff --git a/core/helper_test.go b/core/helper_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b340144fddd1fad76cb79b60bfab9af8fab0f775
--- /dev/null
+++ b/core/helper_test.go
@@ -0,0 +1,93 @@
+package core
+
+import (
+	"container/list"
+	"fmt"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+// Implement our EthTest Manager
+type TestManager struct {
+	// stateManager *StateManager
+	eventMux *event.TypeMux
+
+	db         ethutil.Database
+	txPool     *TxPool
+	blockChain *ChainManager
+	Blocks     []*types.Block
+}
+
+func (s *TestManager) IsListening() bool {
+	return false
+}
+
+func (s *TestManager) IsMining() bool {
+	return false
+}
+
+func (s *TestManager) PeerCount() int {
+	return 0
+}
+
+func (s *TestManager) Peers() *list.List {
+	return list.New()
+}
+
+func (s *TestManager) ChainManager() *ChainManager {
+	return s.blockChain
+}
+
+func (tm *TestManager) TxPool() *TxPool {
+	return tm.txPool
+}
+
+// func (tm *TestManager) StateManager() *StateManager {
+// 	return tm.stateManager
+// }
+
+func (tm *TestManager) EventMux() *event.TypeMux {
+	return tm.eventMux
+}
+func (tm *TestManager) Broadcast(msgType wire.MsgType, data []interface{}) {
+	fmt.Println("Broadcast not implemented")
+}
+
+func (tm *TestManager) ClientIdentity() wire.ClientIdentity {
+	return nil
+}
+func (tm *TestManager) KeyManager() *crypto.KeyManager {
+	return nil
+}
+
+func (tm *TestManager) Db() ethutil.Database {
+	return tm.db
+}
+
+func NewTestManager() *TestManager {
+	ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "ETH")
+
+	db, err := ethdb.NewMemDatabase()
+	if err != nil {
+		fmt.Println("Could not create mem-db, failing")
+		return nil
+	}
+	ethutil.Config.Db = db
+
+	testManager := &TestManager{}
+	testManager.eventMux = new(event.TypeMux)
+	testManager.db = db
+	// testManager.txPool = NewTxPool(testManager)
+	// testManager.blockChain = NewChainManager(testManager)
+	// testManager.stateManager = NewStateManager(testManager)
+
+	// Start the tx pool
+	testManager.txPool.Start()
+
+	return testManager
+}
diff --git a/core/simple_pow.go b/core/simple_pow.go
new file mode 100644
index 0000000000000000000000000000000000000000..9a8bc9592b0bcef7115b5159d4f426ba4fbd39f8
--- /dev/null
+++ b/core/simple_pow.go
@@ -0,0 +1 @@
+package core
diff --git a/core/state_transition.go b/core/state_transition.go
new file mode 100644
index 0000000000000000000000000000000000000000..7b7026c29889e3beeb5ecb5d02fcea8c3d85e995
--- /dev/null
+++ b/core/state_transition.go
@@ -0,0 +1,238 @@
+package core
+
+import (
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+/*
+ * The State transitioning model
+ *
+ * A state transition is a change made when a transaction is applied to the current world state
+ * The state transitioning model does all all the necessary work to work out a valid new state root.
+ * 1) Nonce handling
+ * 2) Pre pay / buy gas of the coinbase (miner)
+ * 3) Create a new state object if the recipient is \0*32
+ * 4) Value transfer
+ * == If contract creation ==
+ * 4a) Attempt to run transaction data
+ * 4b) If valid, use result as code for the new state object
+ * == end ==
+ * 5) Run Script section
+ * 6) Derive new state root
+ */
+type StateTransition struct {
+	coinbase, receiver []byte
+	msg                Message
+	gas, gasPrice      *big.Int
+	initialGas         *big.Int
+	value              *big.Int
+	data               []byte
+	state              *state.StateDB
+	block              *types.Block
+
+	cb, rec, sen *state.StateObject
+
+	Env vm.Environment
+}
+
+type Message interface {
+	Hash() []byte
+
+	From() []byte
+	To() []byte
+
+	GasPrice() *big.Int
+	Gas() *big.Int
+	Value() *big.Int
+
+	Nonce() uint64
+	Data() []byte
+}
+
+func AddressFromMessage(msg Message) []byte {
+	// Generate a new address
+	return crypto.Sha3(ethutil.NewValue([]interface{}{msg.From(), msg.Nonce()}).Encode())[12:]
+}
+
+func MessageCreatesContract(msg Message) bool {
+	return len(msg.To()) == 0
+}
+
+func MessageGasValue(msg Message) *big.Int {
+	return new(big.Int).Mul(msg.Gas(), msg.GasPrice())
+}
+
+func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition {
+	return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), new(big.Int), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil}
+}
+
+func (self *StateTransition) VmEnv() vm.Environment {
+	if self.Env == nil {
+		self.Env = NewEnv(self.state, self.msg, self.block)
+	}
+
+	return self.Env
+}
+
+func (self *StateTransition) Coinbase() *state.StateObject {
+	return self.state.GetOrNewStateObject(self.coinbase)
+}
+func (self *StateTransition) From() *state.StateObject {
+	return self.state.GetOrNewStateObject(self.msg.From())
+}
+func (self *StateTransition) To() *state.StateObject {
+	if self.msg != nil && MessageCreatesContract(self.msg) {
+		return nil
+	}
+	return self.state.GetOrNewStateObject(self.msg.To())
+}
+
+func (self *StateTransition) UseGas(amount *big.Int) error {
+	if self.gas.Cmp(amount) < 0 {
+		return OutOfGasError()
+	}
+	self.gas.Sub(self.gas, amount)
+
+	return nil
+}
+
+func (self *StateTransition) AddGas(amount *big.Int) {
+	self.gas.Add(self.gas, amount)
+}
+
+func (self *StateTransition) BuyGas() error {
+	var err error
+
+	sender := self.From()
+	if sender.Balance().Cmp(MessageGasValue(self.msg)) < 0 {
+		return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address()[:4], MessageGasValue(self.msg), sender.Balance())
+	}
+
+	coinbase := self.Coinbase()
+	err = coinbase.BuyGas(self.msg.Gas(), self.msg.GasPrice())
+	if err != nil {
+		return err
+	}
+
+	self.AddGas(self.msg.Gas())
+	self.initialGas.Set(self.msg.Gas())
+	sender.SubAmount(MessageGasValue(self.msg))
+
+	return nil
+}
+
+func (self *StateTransition) preCheck() (err error) {
+	var (
+		msg    = self.msg
+		sender = self.From()
+	)
+
+	// Make sure this transaction's nonce is correct
+	if sender.Nonce != msg.Nonce() {
+		return NonceError(msg.Nonce(), sender.Nonce)
+	}
+
+	// Pre-pay gas / Buy gas of the coinbase account
+	if err = self.BuyGas(); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (self *StateTransition) TransitionState() (ret []byte, err error) {
+	statelogger.Debugf("(~) %x\n", self.msg.Hash())
+
+	// XXX Transactions after this point are considered valid.
+	if err = self.preCheck(); err != nil {
+		return
+	}
+
+	var (
+		msg    = self.msg
+		sender = self.From()
+	)
+
+	defer self.RefundGas()
+
+	// Increment the nonce for the next transaction
+	sender.Nonce += 1
+
+	// Transaction gas
+	if err = self.UseGas(vm.GasTx); err != nil {
+		return
+	}
+
+	// Pay data gas
+	var dgas int64
+	for _, byt := range self.data {
+		if byt != 0 {
+			dgas += vm.GasData.Int64()
+		} else {
+			dgas += 1 // This is 1/5. If GasData changes this fails
+		}
+	}
+	if err = self.UseGas(big.NewInt(dgas)); err != nil {
+		return
+	}
+
+	vmenv := self.VmEnv()
+	var ref vm.ClosureRef
+	if MessageCreatesContract(msg) {
+		contract := MakeContract(msg, self.state)
+		ret, err, ref = vmenv.Create(sender, contract.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
+		if err == nil {
+			dataGas := big.NewInt(int64(len(ret)))
+			dataGas.Mul(dataGas, vm.GasCreateByte)
+			if err = self.UseGas(dataGas); err == nil {
+				//self.state.SetCode(ref.Address(), ret)
+				ref.SetCode(ret)
+			}
+		}
+	} else {
+		ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value)
+	}
+
+	if err != nil {
+		self.UseGas(self.gas)
+	}
+
+	return
+}
+
+// Converts an transaction in to a state object
+func MakeContract(msg Message, state *state.StateDB) *state.StateObject {
+	addr := AddressFromMessage(msg)
+
+	contract := state.GetOrNewStateObject(addr)
+	contract.InitCode = msg.Data()
+
+	return contract
+}
+
+func (self *StateTransition) RefundGas() {
+	coinbase, sender := self.Coinbase(), self.From()
+	// Return remaining gas
+	remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice())
+	sender.AddAmount(remaining)
+
+	uhalf := new(big.Int).Div(self.GasUsed(), ethutil.Big2)
+	for addr, ref := range self.state.Refunds() {
+		refund := ethutil.BigMin(uhalf, ref)
+		self.gas.Add(self.gas, refund)
+		self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice()))
+	}
+
+	coinbase.RefundGas(self.gas, self.msg.GasPrice())
+}
+
+func (self *StateTransition) GasUsed() *big.Int {
+	return new(big.Int).Sub(self.initialGas, self.gas)
+}
diff --git a/core/transaction_pool.go b/core/transaction_pool.go
new file mode 100644
index 0000000000000000000000000000000000000000..58c2255a48efd1251c5aa5f35857df120e99531c
--- /dev/null
+++ b/core/transaction_pool.go
@@ -0,0 +1,233 @@
+package core
+
+import (
+	"bytes"
+	"container/list"
+	"fmt"
+	"math/big"
+	"sync"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+var txplogger = logger.NewLogger("TXP")
+
+const txPoolQueueSize = 50
+
+type TxPoolHook chan *types.Transaction
+type TxMsgTy byte
+
+const (
+	minGasPrice = 1000000
+)
+
+var MinGasPrice = big.NewInt(10000000000000)
+
+type TxMsg struct {
+	Tx   *types.Transaction
+	Type TxMsgTy
+}
+
+func EachTx(pool *list.List, it func(*types.Transaction, *list.Element) bool) {
+	for e := pool.Front(); e != nil; e = e.Next() {
+		if it(e.Value.(*types.Transaction), e) {
+			break
+		}
+	}
+}
+
+func FindTx(pool *list.List, finder func(*types.Transaction, *list.Element) bool) *types.Transaction {
+	for e := pool.Front(); e != nil; e = e.Next() {
+		if tx, ok := e.Value.(*types.Transaction); ok {
+			if finder(tx, e) {
+				return tx
+			}
+		}
+	}
+
+	return nil
+}
+
+type TxProcessor interface {
+	ProcessTransaction(tx *types.Transaction)
+}
+
+// The tx pool a thread safe transaction pool handler. In order to
+// guarantee a non blocking pool we use a queue channel which can be
+// independently read without needing access to the actual pool. If the
+// pool is being drained or synced for whatever reason the transactions
+// will simple queue up and handled when the mutex is freed.
+type TxPool struct {
+	// The mutex for accessing the Tx pool.
+	mutex sync.Mutex
+	// Queueing channel for reading and writing incoming
+	// transactions to
+	queueChan chan *types.Transaction
+	// Quiting channel
+	quit chan bool
+	// The actual pool
+	pool *list.List
+
+	SecondaryProcessor TxProcessor
+
+	subscribers []chan TxMsg
+
+	broadcaster  types.Broadcaster
+	chainManager *ChainManager
+	eventMux     *event.TypeMux
+}
+
+func NewTxPool(chainManager *ChainManager, broadcaster types.Broadcaster, eventMux *event.TypeMux) *TxPool {
+	return &TxPool{
+		pool:         list.New(),
+		queueChan:    make(chan *types.Transaction, txPoolQueueSize),
+		quit:         make(chan bool),
+		chainManager: chainManager,
+		eventMux:     eventMux,
+		broadcaster:  broadcaster,
+	}
+}
+
+// Blocking function. Don't use directly. Use QueueTransaction instead
+func (pool *TxPool) addTransaction(tx *types.Transaction) {
+	pool.mutex.Lock()
+	defer pool.mutex.Unlock()
+
+	pool.pool.PushBack(tx)
+
+	// Broadcast the transaction to the rest of the peers
+	pool.broadcaster.Broadcast(wire.MsgTxTy, []interface{}{tx.RlpData()})
+}
+
+func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
+	// Get the last block so we can retrieve the sender and receiver from
+	// the merkle trie
+	block := pool.chainManager.CurrentBlock
+	// Something has gone horribly wrong if this happens
+	if block == nil {
+		return fmt.Errorf("No last block on the block chain")
+	}
+
+	if len(tx.To()) != 0 && len(tx.To()) != 20 {
+		return fmt.Errorf("Invalid recipient. len = %d", len(tx.To()))
+	}
+
+	v, _, _ := tx.Curve()
+	if v > 28 || v < 27 {
+		return fmt.Errorf("tx.v != (28 || 27)")
+	}
+
+	// Get the sender
+	sender := pool.chainManager.State().GetAccount(tx.Sender())
+
+	totAmount := new(big.Int).Set(tx.Value())
+	// Make sure there's enough in the sender's account. Having insufficient
+	// funds won't invalidate this transaction but simple ignores it.
+	if sender.Balance().Cmp(totAmount) < 0 {
+		return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.From())
+	}
+
+	// Increment the nonce making each tx valid only once to prevent replay
+	// attacks
+
+	return nil
+}
+
+func (self *TxPool) Add(tx *types.Transaction) error {
+	hash := tx.Hash()
+	foundTx := FindTx(self.pool, func(tx *types.Transaction, e *list.Element) bool {
+		return bytes.Compare(tx.Hash(), hash) == 0
+	})
+
+	if foundTx != nil {
+		return fmt.Errorf("Known transaction (%x)", hash[0:4])
+	}
+
+	err := self.ValidateTransaction(tx)
+	if err != nil {
+		return err
+	}
+
+	self.addTransaction(tx)
+
+	txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.From()[:4], tx.To()[:4], tx.Value, tx.Hash())
+
+	// Notify the subscribers
+	go self.eventMux.Post(TxPreEvent{tx})
+
+	return nil
+}
+
+func (self *TxPool) Size() int {
+	return self.pool.Len()
+}
+
+func (pool *TxPool) CurrentTransactions() []*types.Transaction {
+	pool.mutex.Lock()
+	defer pool.mutex.Unlock()
+
+	txList := make([]*types.Transaction, pool.pool.Len())
+	i := 0
+	for e := pool.pool.Front(); e != nil; e = e.Next() {
+		tx := e.Value.(*types.Transaction)
+
+		txList[i] = tx
+
+		i++
+	}
+
+	return txList
+}
+
+func (pool *TxPool) RemoveInvalid(state *state.StateDB) {
+	pool.mutex.Lock()
+	defer pool.mutex.Unlock()
+
+	for e := pool.pool.Front(); e != nil; e = e.Next() {
+		tx := e.Value.(*types.Transaction)
+		sender := state.GetAccount(tx.Sender())
+		err := pool.ValidateTransaction(tx)
+		if err != nil || sender.Nonce >= tx.Nonce() {
+			pool.pool.Remove(e)
+		}
+	}
+}
+
+func (self *TxPool) RemoveSet(txs types.Transactions) {
+	self.mutex.Lock()
+	defer self.mutex.Unlock()
+
+	for _, tx := range txs {
+		EachTx(self.pool, func(t *types.Transaction, element *list.Element) bool {
+			if t == tx {
+				self.pool.Remove(element)
+				return true // To stop the loop
+			}
+			return false
+		})
+	}
+}
+
+func (pool *TxPool) Flush() []*types.Transaction {
+	txList := pool.CurrentTransactions()
+
+	// Recreate a new list all together
+	// XXX Is this the fastest way?
+	pool.pool = list.New()
+
+	return txList
+}
+
+func (pool *TxPool) Start() {
+	//go pool.queueHandler()
+}
+
+func (pool *TxPool) Stop() {
+	pool.Flush()
+
+	txplogger.Infoln("Stopped")
+}
diff --git a/core/types/block.go b/core/types/block.go
new file mode 100644
index 0000000000000000000000000000000000000000..2d889f35f4a1d93ec359ba38b2978af6467d97e9
--- /dev/null
+++ b/core/types/block.go
@@ -0,0 +1,416 @@
+package types
+
+import (
+	"bytes"
+	"fmt"
+	"math/big"
+	"sort"
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type BlockInfo struct {
+	Number uint64
+	Hash   []byte
+	Parent []byte
+	TD     *big.Int
+}
+
+func (bi *BlockInfo) RlpDecode(data []byte) {
+	decoder := ethutil.NewValueFromBytes(data)
+
+	bi.Number = decoder.Get(0).Uint()
+	bi.Hash = decoder.Get(1).Bytes()
+	bi.Parent = decoder.Get(2).Bytes()
+	bi.TD = decoder.Get(3).BigInt()
+}
+
+func (bi *BlockInfo) RlpEncode() []byte {
+	return ethutil.Encode([]interface{}{bi.Number, bi.Hash, bi.Parent, bi.TD})
+}
+
+type Blocks []*Block
+
+func (self Blocks) AsSet() ethutil.UniqueSet {
+	set := make(ethutil.UniqueSet)
+	for _, block := range self {
+		set.Insert(block.Hash())
+	}
+
+	return set
+}
+
+type BlockBy func(b1, b2 *Block) bool
+
+func (self BlockBy) Sort(blocks Blocks) {
+	bs := blockSorter{
+		blocks: blocks,
+		by:     self,
+	}
+	sort.Sort(bs)
+}
+
+type blockSorter struct {
+	blocks Blocks
+	by     func(b1, b2 *Block) bool
+}
+
+func (self blockSorter) Len() int { return len(self.blocks) }
+func (self blockSorter) Swap(i, j int) {
+	self.blocks[i], self.blocks[j] = self.blocks[j], self.blocks[i]
+}
+func (self blockSorter) Less(i, j int) bool { return self.by(self.blocks[i], self.blocks[j]) }
+
+func Number(b1, b2 *Block) bool { return b1.Number.Cmp(b2.Number) < 0 }
+
+type Block struct {
+	// Hash to the previous block
+	PrevHash ethutil.Bytes
+	// Uncles of this block
+	Uncles   Blocks
+	UncleSha []byte
+	// The coin base address
+	Coinbase []byte
+	// Block Trie state
+	//state *ethutil.Trie
+	state *state.StateDB
+	// Difficulty for the current block
+	Difficulty *big.Int
+	// Creation time
+	Time int64
+	// The block number
+	Number *big.Int
+	// Gas limit
+	GasLimit *big.Int
+	// Gas used
+	GasUsed *big.Int
+	// Extra data
+	Extra string
+	// Block Nonce for verification
+	Nonce ethutil.Bytes
+	// List of transactions and/or contracts
+	transactions      Transactions
+	receipts          Receipts
+	TxSha, ReceiptSha []byte
+	LogsBloom         []byte
+
+	Reward *big.Int
+}
+
+func NewBlockFromBytes(raw []byte) *Block {
+	block := &Block{}
+	block.RlpDecode(raw)
+
+	return block
+}
+
+// New block takes a raw encoded string
+func NewBlockFromRlpValue(rlpValue *ethutil.Value) *Block {
+	block := &Block{}
+	block.RlpValueDecode(rlpValue)
+
+	return block
+}
+
+func CreateBlock(root interface{},
+	prevHash []byte,
+	base []byte,
+	Difficulty *big.Int,
+	Nonce []byte,
+	extra string) *Block {
+
+	block := &Block{
+		PrevHash:   prevHash,
+		Coinbase:   base,
+		Difficulty: Difficulty,
+		Nonce:      Nonce,
+		Time:       time.Now().Unix(),
+		Extra:      extra,
+		UncleSha:   nil,
+		GasUsed:    new(big.Int),
+		GasLimit:   new(big.Int),
+	}
+	block.SetUncles([]*Block{})
+
+	block.state = state.New(trie.New(ethutil.Config.Db, root))
+
+	return block
+}
+
+// Returns a hash of the block
+func (block *Block) Hash() ethutil.Bytes {
+	return crypto.Sha3(ethutil.NewValue(block.header()).Encode())
+	//return crypto.Sha3(block.Value().Encode())
+}
+
+func (block *Block) HashNoNonce() []byte {
+	return crypto.Sha3(ethutil.Encode(block.miningHeader()))
+}
+
+func (block *Block) State() *state.StateDB {
+	return block.state
+}
+
+func (block *Block) Transactions() Transactions {
+	return block.transactions
+}
+
+func (block *Block) CalcGasLimit(parent *Block) *big.Int {
+	if block.Number.Cmp(big.NewInt(0)) == 0 {
+		return ethutil.BigPow(10, 6)
+	}
+
+	// ((1024-1) * parent.gasLimit + (gasUsed * 6 / 5)) / 1024
+
+	previous := new(big.Int).Mul(big.NewInt(1024-1), parent.GasLimit)
+	current := new(big.Rat).Mul(new(big.Rat).SetInt(parent.GasUsed), big.NewRat(6, 5))
+	curInt := new(big.Int).Div(current.Num(), current.Denom())
+
+	result := new(big.Int).Add(previous, curInt)
+	result.Div(result, big.NewInt(1024))
+
+	min := big.NewInt(125000)
+
+	return ethutil.BigMax(min, result)
+}
+
+func (block *Block) BlockInfo() BlockInfo {
+	bi := BlockInfo{}
+	data, _ := ethutil.Config.Db.Get(append(block.Hash(), []byte("Info")...))
+	bi.RlpDecode(data)
+
+	return bi
+}
+
+func (self *Block) GetTransaction(hash []byte) *Transaction {
+	for _, tx := range self.transactions {
+		if bytes.Compare(tx.Hash(), hash) == 0 {
+			return tx
+		}
+	}
+
+	return nil
+}
+
+// Sync the block's state and contract respectively
+func (block *Block) Sync() {
+	block.state.Sync()
+}
+
+func (block *Block) Undo() {
+	// Sync the block state itself
+	block.state.Reset()
+}
+
+/////// Block Encoding
+func (block *Block) rlpReceipts() interface{} {
+	// Marshal the transactions of this block
+	encR := make([]interface{}, len(block.receipts))
+	for i, r := range block.receipts {
+		// Cast it to a string (safe)
+		encR[i] = r.RlpData()
+	}
+
+	return encR
+}
+
+func (block *Block) rlpUncles() interface{} {
+	// Marshal the transactions of this block
+	uncles := make([]interface{}, len(block.Uncles))
+	for i, uncle := range block.Uncles {
+		// Cast it to a string (safe)
+		uncles[i] = uncle.header()
+	}
+
+	return uncles
+}
+
+func (block *Block) SetUncles(uncles []*Block) {
+	block.Uncles = uncles
+	block.UncleSha = crypto.Sha3(ethutil.Encode(block.rlpUncles()))
+}
+
+func (self *Block) SetReceipts(receipts Receipts) {
+	self.receipts = receipts
+	self.ReceiptSha = DeriveSha(receipts)
+	self.LogsBloom = CreateBloom(receipts)
+}
+
+func (self *Block) SetTransactions(txs Transactions) {
+	self.transactions = txs
+	self.TxSha = DeriveSha(txs)
+}
+
+func (block *Block) Value() *ethutil.Value {
+	return ethutil.NewValue([]interface{}{block.header(), block.transactions, block.rlpUncles()})
+}
+
+func (block *Block) RlpEncode() []byte {
+	// Encode a slice interface which contains the header and the list of
+	// transactions.
+	return block.Value().Encode()
+}
+
+func (block *Block) RlpDecode(data []byte) {
+	rlpValue := ethutil.NewValueFromBytes(data)
+	block.RlpValueDecode(rlpValue)
+}
+
+func (block *Block) RlpValueDecode(decoder *ethutil.Value) {
+	block.setHeader(decoder.Get(0))
+
+	// Tx list might be empty if this is an uncle. Uncles only have their
+	// header set.
+	if decoder.Get(1).IsNil() == false { // Yes explicitness
+		//receipts := decoder.Get(1)
+		//block.receipts = make([]*Receipt, receipts.Len())
+		txs := decoder.Get(1)
+		block.transactions = make(Transactions, txs.Len())
+		for i := 0; i < txs.Len(); i++ {
+			block.transactions[i] = NewTransactionFromValue(txs.Get(i))
+			//receipt := NewRecieptFromValue(receipts.Get(i))
+			//block.transactions[i] = receipt.Tx
+			//block.receipts[i] = receipt
+		}
+
+	}
+
+	if decoder.Get(2).IsNil() == false { // Yes explicitness
+		uncles := decoder.Get(2)
+		block.Uncles = make([]*Block, uncles.Len())
+		for i := 0; i < uncles.Len(); i++ {
+			block.Uncles[i] = NewUncleBlockFromValue(uncles.Get(i))
+		}
+	}
+
+}
+
+func (self *Block) setHeader(header *ethutil.Value) {
+	self.PrevHash = header.Get(0).Bytes()
+	self.UncleSha = header.Get(1).Bytes()
+	self.Coinbase = header.Get(2).Bytes()
+	self.state = state.New(trie.New(ethutil.Config.Db, header.Get(3).Val))
+	self.TxSha = header.Get(4).Bytes()
+	self.ReceiptSha = header.Get(5).Bytes()
+	self.LogsBloom = header.Get(6).Bytes()
+	self.Difficulty = header.Get(7).BigInt()
+	self.Number = header.Get(8).BigInt()
+	self.GasLimit = header.Get(9).BigInt()
+	self.GasUsed = header.Get(10).BigInt()
+	self.Time = int64(header.Get(11).BigInt().Uint64())
+	self.Extra = header.Get(12).Str()
+	self.Nonce = header.Get(13).Bytes()
+}
+
+func NewUncleBlockFromValue(header *ethutil.Value) *Block {
+	block := &Block{}
+	block.setHeader(header)
+
+	return block
+}
+
+func (block *Block) Trie() *trie.Trie {
+	return block.state.Trie
+}
+
+func (block *Block) Root() interface{} {
+	return block.state.Root()
+}
+
+func (block *Block) Diff() *big.Int {
+	return block.Difficulty
+}
+
+func (self *Block) Receipts() []*Receipt {
+	return self.receipts
+}
+
+func (block *Block) miningHeader() []interface{} {
+	return []interface{}{
+		// Sha of the previous block
+		block.PrevHash,
+		// Sha of uncles
+		block.UncleSha,
+		// Coinbase address
+		block.Coinbase,
+		// root state
+		block.Root(),
+		// tx root
+		block.TxSha,
+		// Sha of tx
+		block.ReceiptSha,
+		// Bloom
+		block.LogsBloom,
+		// Current block Difficulty
+		block.Difficulty,
+		// The block number
+		block.Number,
+		// Block upper gas bound
+		block.GasLimit,
+		// Block gas used
+		block.GasUsed,
+		// Time the block was found?
+		block.Time,
+		// Extra data
+		block.Extra,
+	}
+}
+
+func (block *Block) header() []interface{} {
+	return append(block.miningHeader(), block.Nonce)
+}
+
+func (block *Block) String() string {
+	return fmt.Sprintf(`
+	BLOCK(%x): Size: %v
+	PrevHash:   %x
+	UncleSha:   %x
+	Coinbase:   %x
+	Root:       %x
+	TxSha       %x
+	ReceiptSha: %x
+	Bloom:      %x
+	Difficulty: %v
+	Number:     %v
+	MaxLimit:   %v
+	GasUsed:    %v
+	Time:       %v
+	Extra:      %v
+	Nonce:      %x
+	NumTx:      %v
+`,
+		block.Hash(),
+		block.Size(),
+		block.PrevHash,
+		block.UncleSha,
+		block.Coinbase,
+		block.Root(),
+		block.TxSha,
+		block.ReceiptSha,
+		block.LogsBloom,
+		block.Difficulty,
+		block.Number,
+		block.GasLimit,
+		block.GasUsed,
+		block.Time,
+		block.Extra,
+		block.Nonce,
+		len(block.transactions),
+	)
+}
+
+func (self *Block) Size() ethutil.StorageSize {
+	return ethutil.StorageSize(len(self.RlpEncode()))
+}
+
+// Implement RlpEncodable
+func (self *Block) RlpData() interface{} {
+	return []interface{}{self.header(), self.transactions, self.rlpUncles()}
+}
+
+// Implement pow.Block
+func (self *Block) N() []byte { return self.Nonce }
diff --git a/core/types/bloom9.go b/core/types/bloom9.go
new file mode 100644
index 0000000000000000000000000000000000000000..c1841e55326125fe2162a4c1f9d817e0f4686f67
--- /dev/null
+++ b/core/types/bloom9.go
@@ -0,0 +1,54 @@
+package types
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+func CreateBloom(receipts Receipts) []byte {
+	bin := new(big.Int)
+	for _, receipt := range receipts {
+		bin.Or(bin, LogsBloom(receipt.logs))
+	}
+
+	return ethutil.LeftPadBytes(bin.Bytes(), 64)
+}
+
+func LogsBloom(logs state.Logs) *big.Int {
+	bin := new(big.Int)
+	for _, log := range logs {
+		data := make([][]byte, len(log.Topics())+1)
+		data[0] = log.Address()
+
+		for i, topic := range log.Topics() {
+			data[i+1] = topic
+		}
+
+		for _, b := range data {
+			bin.Or(bin, ethutil.BigD(bloom9(crypto.Sha3(b)).Bytes()))
+		}
+	}
+
+	return bin
+}
+
+func bloom9(b []byte) *big.Int {
+	r := new(big.Int)
+	for _, i := range []int{0, 2, 4} {
+		t := big.NewInt(1)
+		b := uint(b[i+1]) + 256*(uint(b[i])&1)
+		r.Or(r, t.Lsh(t, b))
+	}
+
+	return r
+}
+
+func BloomLookup(bin, topic []byte) bool {
+	bloom := ethutil.BigD(bin)
+	cmp := bloom9(crypto.Sha3(topic))
+
+	return bloom.And(bloom, cmp).Cmp(cmp) == 0
+}
diff --git a/core/types/bloom9_test.go b/core/types/bloom9_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..74e00cac6b11e63931c2ec3f6b8508edcbbf32f9
--- /dev/null
+++ b/core/types/bloom9_test.go
@@ -0,0 +1,31 @@
+package types
+
+/*
+import (
+	"testing"
+
+	"github.com/ethereum/go-ethereum/state"
+)
+
+func TestBloom9(t *testing.T) {
+	testCase := []byte("testtest")
+	bin := LogsBloom([]state.Log{
+		{testCase, [][]byte{[]byte("hellohello")}, nil},
+	}).Bytes()
+	res := BloomLookup(bin, testCase)
+
+	if !res {
+		t.Errorf("Bloom lookup failed")
+	}
+}
+
+
+func TestAddress(t *testing.T) {
+	block := &Block{}
+	block.Coinbase = ethutil.Hex2Bytes("22341ae42d6dd7384bc8584e50419ea3ac75b83f")
+	fmt.Printf("%x\n", crypto.Sha3(block.Coinbase))
+
+	bin := CreateBloom(block)
+	fmt.Printf("bin = %x\n", ethutil.LeftPadBytes(bin, 64))
+}
+*/
diff --git a/core/types/common.go b/core/types/common.go
new file mode 100644
index 0000000000000000000000000000000000000000..89cb5f498699c7cc717a3f976d9af71f7eebc867
--- /dev/null
+++ b/core/types/common.go
@@ -0,0 +1,16 @@
+package types
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+type BlockProcessor interface {
+	Process(*Block) (*big.Int, state.Messages, error)
+}
+
+type Broadcaster interface {
+	Broadcast(wire.MsgType, []interface{})
+}
diff --git a/core/types/derive_sha.go b/core/types/derive_sha.go
new file mode 100644
index 0000000000000000000000000000000000000000..1897ff198f8d37bacb21f634d81cb1df80a02241
--- /dev/null
+++ b/core/types/derive_sha.go
@@ -0,0 +1,20 @@
+package types
+
+import (
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type DerivableList interface {
+	Len() int
+	GetRlp(i int) []byte
+}
+
+func DeriveSha(list DerivableList) []byte {
+	trie := trie.New(ethutil.Config.Db, "")
+	for i := 0; i < list.Len(); i++ {
+		trie.Update(string(ethutil.NewValue(i).Encode()), string(list.GetRlp(i)))
+	}
+
+	return trie.GetRoot()
+}
diff --git a/core/types/receipt.go b/core/types/receipt.go
new file mode 100644
index 0000000000000000000000000000000000000000..bac64e41d6c510f075ada5757d70d55d80aac2e9
--- /dev/null
+++ b/core/types/receipt.go
@@ -0,0 +1,81 @@
+package types
+
+import (
+	"bytes"
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type Receipt struct {
+	PostState         []byte
+	CumulativeGasUsed *big.Int
+	Bloom             []byte
+	logs              state.Logs
+}
+
+func NewReceipt(root []byte, cumalativeGasUsed *big.Int) *Receipt {
+	return &Receipt{PostState: ethutil.CopyBytes(root), CumulativeGasUsed: cumalativeGasUsed}
+}
+
+func NewRecieptFromValue(val *ethutil.Value) *Receipt {
+	r := &Receipt{}
+	r.RlpValueDecode(val)
+
+	return r
+}
+
+func (self *Receipt) SetLogs(logs state.Logs) {
+	self.logs = logs
+}
+
+func (self *Receipt) RlpValueDecode(decoder *ethutil.Value) {
+	self.PostState = decoder.Get(0).Bytes()
+	self.CumulativeGasUsed = decoder.Get(1).BigInt()
+	self.Bloom = decoder.Get(2).Bytes()
+
+	it := decoder.Get(3).NewIterator()
+	for it.Next() {
+		self.logs = append(self.logs, state.NewLogFromValue(it.Value()))
+	}
+}
+
+func (self *Receipt) RlpData() interface{} {
+	return []interface{}{self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs.RlpData()}
+}
+
+func (self *Receipt) RlpEncode() []byte {
+	return ethutil.Encode(self.RlpData())
+}
+
+func (self *Receipt) Cmp(other *Receipt) bool {
+	if bytes.Compare(self.PostState, other.PostState) != 0 {
+		return false
+	}
+
+	return true
+}
+
+func (self *Receipt) String() string {
+	return fmt.Sprintf("receipt{med=%x cgas=%v bloom=%x logs=%v}", self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs)
+}
+
+type Receipts []*Receipt
+
+func (self Receipts) RlpData() interface{} {
+	data := make([]interface{}, len(self))
+	for i, receipt := range self {
+		data[i] = receipt.RlpData()
+	}
+
+	return data
+}
+
+func (self Receipts) RlpEncode() []byte {
+	return ethutil.Encode(self.RlpData())
+}
+
+func (self Receipts) Len() int            { return len(self) }
+func (self Receipts) GetRlp(i int) []byte { return ethutil.Rlp(self[i]) }
diff --git a/core/types/transaction.go b/core/types/transaction.go
new file mode 100644
index 0000000000000000000000000000000000000000..f6ad0774b689f1b178361a384ef200d10420dc00
--- /dev/null
+++ b/core/types/transaction.go
@@ -0,0 +1,224 @@
+package types
+
+import (
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/obscuren/secp256k1-go"
+)
+
+func IsContractAddr(addr []byte) bool {
+	return len(addr) == 0
+}
+
+type Transaction struct {
+	nonce     uint64
+	recipient []byte
+	value     *big.Int
+	gas       *big.Int
+	gasPrice  *big.Int
+	data      []byte
+	v         byte
+	r, s      []byte
+}
+
+func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction {
+	return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script}
+}
+
+func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction {
+	return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data}
+}
+
+func NewTransactionFromBytes(data []byte) *Transaction {
+	tx := &Transaction{}
+	tx.RlpDecode(data)
+
+	return tx
+}
+
+func NewTransactionFromValue(val *ethutil.Value) *Transaction {
+	tx := &Transaction{}
+	tx.RlpValueDecode(val)
+
+	return tx
+}
+
+func (tx *Transaction) Hash() []byte {
+	data := []interface{}{tx.nonce, tx.gasPrice, tx.gas, tx.recipient, tx.value, tx.data}
+
+	return crypto.Sha3(ethutil.NewValue(data).Encode())
+}
+
+func (self *Transaction) Data() []byte {
+	return self.data
+}
+
+func (self *Transaction) Gas() *big.Int {
+	return self.gas
+}
+
+func (self *Transaction) GasPrice() *big.Int {
+	return self.gasPrice
+}
+
+func (self *Transaction) Value() *big.Int {
+	return self.value
+}
+
+func (self *Transaction) Nonce() uint64 {
+	return self.nonce
+}
+
+func (self *Transaction) SetNonce(nonce uint64) {
+	self.nonce = nonce
+}
+
+func (self *Transaction) From() []byte {
+	return self.Sender()
+}
+
+func (self *Transaction) To() []byte {
+	return self.recipient
+}
+
+func (tx *Transaction) Curve() (v byte, r []byte, s []byte) {
+	v = tx.v
+	r = ethutil.LeftPadBytes(tx.r, 32)
+	s = ethutil.LeftPadBytes(tx.s, 32)
+
+	return
+}
+
+func (tx *Transaction) Signature(key []byte) []byte {
+	hash := tx.Hash()
+
+	sig, _ := secp256k1.Sign(hash, key)
+
+	return sig
+}
+
+func (tx *Transaction) PublicKey() []byte {
+	hash := tx.Hash()
+
+	v, r, s := tx.Curve()
+
+	sig := append(r, s...)
+	sig = append(sig, v-27)
+
+	//pubkey := crypto.Ecrecover(append(hash, sig...))
+	pubkey, _ := secp256k1.RecoverPubkey(hash, sig)
+
+	return pubkey
+}
+
+func (tx *Transaction) Sender() []byte {
+	pubkey := tx.PublicKey()
+
+	// Validate the returned key.
+	// Return nil if public key isn't in full format
+	if len(pubkey) != 0 && pubkey[0] != 4 {
+		return nil
+	}
+
+	return crypto.Sha3(pubkey[1:])[12:]
+}
+
+func (tx *Transaction) Sign(privk []byte) error {
+
+	sig := tx.Signature(privk)
+
+	tx.r = sig[:32]
+	tx.s = sig[32:64]
+	tx.v = sig[64] + 27
+
+	return nil
+}
+
+func (tx *Transaction) RlpData() interface{} {
+	data := []interface{}{tx.nonce, tx.gasPrice, tx.gas, tx.recipient, tx.value, tx.data}
+
+	return append(data, tx.v, new(big.Int).SetBytes(tx.r).Bytes(), new(big.Int).SetBytes(tx.s).Bytes())
+}
+
+func (tx *Transaction) RlpValue() *ethutil.Value {
+	return ethutil.NewValue(tx.RlpData())
+}
+
+func (tx *Transaction) RlpEncode() []byte {
+	return tx.RlpValue().Encode()
+}
+
+func (tx *Transaction) RlpDecode(data []byte) {
+	tx.RlpValueDecode(ethutil.NewValueFromBytes(data))
+}
+
+func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
+	tx.nonce = decoder.Get(0).Uint()
+	tx.gasPrice = decoder.Get(1).BigInt()
+	tx.gas = decoder.Get(2).BigInt()
+	tx.recipient = decoder.Get(3).Bytes()
+	tx.value = decoder.Get(4).BigInt()
+	tx.data = decoder.Get(5).Bytes()
+	tx.v = byte(decoder.Get(6).Uint())
+
+	tx.r = decoder.Get(7).Bytes()
+	tx.s = decoder.Get(8).Bytes()
+}
+
+func (tx *Transaction) String() string {
+	return fmt.Sprintf(`
+	TX(%x)
+	Contract: %v
+	From:     %x
+	To:       %x
+	Nonce:    %v
+	GasPrice: %v
+	Gas:      %v
+	Value:    %v
+	Data:     0x%x
+	V:        0x%x
+	R:        0x%x
+	S:        0x%x
+	Hex:      %x
+	`,
+		tx.Hash(),
+		len(tx.recipient) == 0,
+		tx.Sender(),
+		tx.recipient,
+		tx.nonce,
+		tx.gasPrice,
+		tx.gas,
+		tx.value,
+		tx.data,
+		tx.v,
+		tx.r,
+		tx.s,
+		ethutil.Encode(tx),
+	)
+}
+
+// Transaction slice type for basic sorting
+type Transactions []*Transaction
+
+func (self Transactions) RlpData() interface{} {
+	// Marshal the transactions of this block
+	enc := make([]interface{}, len(self))
+	for i, tx := range self {
+		// Cast it to a string (safe)
+		enc[i] = tx.RlpData()
+	}
+
+	return enc
+}
+func (s Transactions) Len() int            { return len(s) }
+func (s Transactions) Swap(i, j int)       { s[i], s[j] = s[j], s[i] }
+func (s Transactions) GetRlp(i int) []byte { return ethutil.Rlp(s[i]) }
+
+type TxByNonce struct{ Transactions }
+
+func (s TxByNonce) Less(i, j int) bool {
+	return s.Transactions[i].nonce < s.Transactions[j].nonce
+}
diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..ab1254f4c2bef8c6f41f1042ec2fbd3381d1bea8
--- /dev/null
+++ b/core/types/transaction_test.go
@@ -0,0 +1 @@
+package types
diff --git a/core/vm_env.go b/core/vm_env.go
new file mode 100644
index 0000000000000000000000000000000000000000..ad63ecf9c6fd1fc89b2121657fc7203a9996937b
--- /dev/null
+++ b/core/vm_env.go
@@ -0,0 +1,61 @@
+package core
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+type VMEnv struct {
+	state *state.StateDB
+	block *types.Block
+	msg   Message
+	depth int
+}
+
+func NewEnv(state *state.StateDB, msg Message, block *types.Block) *VMEnv {
+	return &VMEnv{
+		state: state,
+		block: block,
+		msg:   msg,
+	}
+}
+
+func (self *VMEnv) Origin() []byte        { return self.msg.From() }
+func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number }
+func (self *VMEnv) PrevHash() []byte      { return self.block.PrevHash }
+func (self *VMEnv) Coinbase() []byte      { return self.block.Coinbase }
+func (self *VMEnv) Time() int64           { return self.block.Time }
+func (self *VMEnv) Difficulty() *big.Int  { return self.block.Difficulty }
+func (self *VMEnv) BlockHash() []byte     { return self.block.Hash() }
+func (self *VMEnv) Value() *big.Int       { return self.msg.Value() }
+func (self *VMEnv) State() *state.StateDB { return self.state }
+func (self *VMEnv) GasLimit() *big.Int    { return self.block.GasLimit }
+func (self *VMEnv) Depth() int            { return self.depth }
+func (self *VMEnv) SetDepth(i int)        { self.depth = i }
+func (self *VMEnv) AddLog(log state.Log) {
+	self.state.AddLog(log)
+}
+func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error {
+	return vm.Transfer(from, to, amount)
+}
+
+func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *Execution {
+	return NewExecution(self, addr, data, gas, price, value)
+}
+
+func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Call(addr, me)
+}
+func (self *VMEnv) CallCode(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(me.Address(), data, gas, price, value)
+	return exe.Call(addr, me)
+}
+
+func (self *VMEnv) Create(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Create(me)
+}
diff --git a/crypto/crypto.go b/crypto/crypto.go
new file mode 100644
index 0000000000000000000000000000000000000000..b8fd78fa2f69b07f51ac2e858ef22902759f3326
--- /dev/null
+++ b/crypto/crypto.go
@@ -0,0 +1,115 @@
+package crypto
+
+import (
+	"crypto/ecdsa"
+	"crypto/elliptic"
+	"crypto/rand"
+	"crypto/sha256"
+
+	"code.google.com/p/go.crypto/ripemd160"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/obscuren/ecies"
+	"github.com/obscuren/secp256k1-go"
+	"github.com/obscuren/sha3"
+)
+
+func init() {
+	// specify the params for the s256 curve
+	ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256)
+}
+
+func Sha3(data []byte) []byte {
+	d := sha3.NewKeccak256()
+	d.Write(data)
+
+	return d.Sum(nil)
+}
+
+// Creates an ethereum address given the bytes and the nonce
+func CreateAddress(b []byte, nonce uint64) []byte {
+	return Sha3(ethutil.NewValue([]interface{}{b, nonce}).Encode())[12:]
+}
+
+func Sha256(data []byte) []byte {
+	hash := sha256.Sum256(data)
+
+	return hash[:]
+}
+
+func Ripemd160(data []byte) []byte {
+	ripemd := ripemd160.New()
+	ripemd.Write(data)
+
+	return ripemd.Sum(nil)
+}
+
+func Ecrecover(data []byte) []byte {
+	var in = struct {
+		hash []byte
+		sig  []byte
+	}{data[:32], data[32:]}
+
+	r, _ := secp256k1.RecoverPubkey(in.hash, in.sig)
+
+	return r
+}
+
+// New methods using proper ecdsa keys from the stdlib
+func ToECDSA(prv []byte) *ecdsa.PrivateKey {
+	if len(prv) == 0 {
+		return nil
+	}
+
+	priv := new(ecdsa.PrivateKey)
+	priv.PublicKey.Curve = S256()
+	priv.D = ethutil.BigD(prv)
+	priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv)
+	return priv
+}
+
+func FromECDSA(prv *ecdsa.PrivateKey) []byte {
+	if prv == nil {
+		return nil
+	}
+	return prv.D.Bytes()
+}
+
+func ToECDSAPub(pub []byte) *ecdsa.PublicKey {
+	if len(pub) == 0 {
+		return nil
+	}
+	x, y := elliptic.Unmarshal(S256(), pub)
+	return &ecdsa.PublicKey{S256(), x, y}
+}
+
+func FromECDSAPub(pub *ecdsa.PublicKey) []byte {
+	if pub == nil {
+		return nil
+	}
+	return elliptic.Marshal(S256(), pub.X, pub.Y)
+}
+
+func GenerateKey() (*ecdsa.PrivateKey, error) {
+	return ecdsa.GenerateKey(S256(), rand.Reader)
+}
+
+func SigToPub(hash, sig []byte) *ecdsa.PublicKey {
+	s := Ecrecover(append(hash, sig...))
+	x, y := elliptic.Unmarshal(S256(), s)
+
+	return &ecdsa.PublicKey{S256(), x, y}
+}
+
+func Sign(hash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) {
+	sig, err = secp256k1.Sign(hash, prv.D.Bytes())
+	return
+}
+
+func Encrypt(pub *ecdsa.PublicKey, message []byte) ([]byte, error) {
+	return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(pub), message, nil, nil)
+}
+
+func Decrypt(prv *ecdsa.PrivateKey, ct []byte) ([]byte, error) {
+	key := ecies.ImportECDSA(prv)
+	return key.Decrypt(rand.Reader, ct, nil, nil)
+}
diff --git a/crypto/crypto_test.go b/crypto/crypto_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..af62a02a219902d8ab2e0304992be4f4ccf661bb
--- /dev/null
+++ b/crypto/crypto_test.go
@@ -0,0 +1,36 @@
+package crypto
+
+import (
+	"bytes"
+	"encoding/hex"
+	"testing"
+)
+
+// These tests are sanity checks.
+// They should ensure that we don't e.g. use Sha3-224 instead of Sha3-256
+// and that the sha3 library uses keccak-f permutation.
+
+func TestSha3(t *testing.T) {
+	msg := []byte("abc")
+	exp, _ := hex.DecodeString("4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45")
+	checkhash(t, "Sha3-256", Sha3, msg, exp)
+}
+
+func TestSha256(t *testing.T) {
+	msg := []byte("abc")
+	exp, _ := hex.DecodeString("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
+	checkhash(t, "Sha256", Sha256, msg, exp)
+}
+
+func TestRipemd160(t *testing.T) {
+	msg := []byte("abc")
+	exp, _ := hex.DecodeString("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc")
+	checkhash(t, "Ripemd160", Ripemd160, msg, exp)
+}
+
+func checkhash(t *testing.T, name string, f func([]byte) []byte, msg, exp []byte) {
+	sum := f(msg)
+	if bytes.Compare(exp, sum) != 0 {
+		t.Errorf("hash %s returned wrong result.\ngot:  %x\nwant: %x", name, sum, exp)
+	}
+}
diff --git a/crypto/curve.go b/crypto/curve.go
new file mode 100644
index 0000000000000000000000000000000000000000..131a0dd2f8119bc773486a56715a9cccfabdc0d2
--- /dev/null
+++ b/crypto/curve.go
@@ -0,0 +1,363 @@
+package crypto
+
+// Copyright 2010 The Go Authors. All rights reserved.
+// Copyright 2011 ThePiachu. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package bitelliptic implements several Koblitz elliptic curves over prime
+// fields.
+
+// This package operates, internally, on Jacobian coordinates. For a given
+// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1)
+// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole
+// calculation can be performed within the transform (as in ScalarMult and
+// ScalarBaseMult). But even for Add and Double, it's faster to apply and
+// reverse the transform than to operate in affine coordinates.
+
+import (
+	"crypto/elliptic"
+	"io"
+	"math/big"
+	"sync"
+)
+
+// A BitCurve represents a Koblitz Curve with a=0.
+// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html
+type BitCurve struct {
+	P       *big.Int // the order of the underlying field
+	N       *big.Int // the order of the base point
+	B       *big.Int // the constant of the BitCurve equation
+	Gx, Gy  *big.Int // (x,y) of the base point
+	BitSize int      // the size of the underlying field
+}
+
+func (BitCurve *BitCurve) Params() *elliptic.CurveParams {
+	return &elliptic.CurveParams{BitCurve.P, BitCurve.N, BitCurve.B, BitCurve.Gx, BitCurve.Gy, BitCurve.BitSize}
+}
+
+// IsOnBitCurve returns true if the given (x,y) lies on the BitCurve.
+func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool {
+	// y² = x³ + b
+	y2 := new(big.Int).Mul(y, y) //y²
+	y2.Mod(y2, BitCurve.P)       //y²%P
+
+	x3 := new(big.Int).Mul(x, x) //x²
+	x3.Mul(x3, x)                //x³
+
+	x3.Add(x3, BitCurve.B) //x³+B
+	x3.Mod(x3, BitCurve.P) //(x³+B)%P
+
+	return x3.Cmp(y2) == 0
+}
+
+//TODO: double check if the function is okay
+// affineFromJacobian reverses the Jacobian transform. See the comment at the
+// top of the file.
+func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) {
+	zinv := new(big.Int).ModInverse(z, BitCurve.P)
+	zinvsq := new(big.Int).Mul(zinv, zinv)
+
+	xOut = new(big.Int).Mul(x, zinvsq)
+	xOut.Mod(xOut, BitCurve.P)
+	zinvsq.Mul(zinvsq, zinv)
+	yOut = new(big.Int).Mul(y, zinvsq)
+	yOut.Mod(yOut, BitCurve.P)
+	return
+}
+
+// Add returns the sum of (x1,y1) and (x2,y2)
+func (BitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {
+	z := new(big.Int).SetInt64(1)
+	return BitCurve.affineFromJacobian(BitCurve.addJacobian(x1, y1, z, x2, y2, z))
+}
+
+// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and
+// (x2, y2, z2) and returns their sum, also in Jacobian form.
+func (BitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) {
+	// See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
+	z1z1 := new(big.Int).Mul(z1, z1)
+	z1z1.Mod(z1z1, BitCurve.P)
+	z2z2 := new(big.Int).Mul(z2, z2)
+	z2z2.Mod(z2z2, BitCurve.P)
+
+	u1 := new(big.Int).Mul(x1, z2z2)
+	u1.Mod(u1, BitCurve.P)
+	u2 := new(big.Int).Mul(x2, z1z1)
+	u2.Mod(u2, BitCurve.P)
+	h := new(big.Int).Sub(u2, u1)
+	if h.Sign() == -1 {
+		h.Add(h, BitCurve.P)
+	}
+	i := new(big.Int).Lsh(h, 1)
+	i.Mul(i, i)
+	j := new(big.Int).Mul(h, i)
+
+	s1 := new(big.Int).Mul(y1, z2)
+	s1.Mul(s1, z2z2)
+	s1.Mod(s1, BitCurve.P)
+	s2 := new(big.Int).Mul(y2, z1)
+	s2.Mul(s2, z1z1)
+	s2.Mod(s2, BitCurve.P)
+	r := new(big.Int).Sub(s2, s1)
+	if r.Sign() == -1 {
+		r.Add(r, BitCurve.P)
+	}
+	r.Lsh(r, 1)
+	v := new(big.Int).Mul(u1, i)
+
+	x3 := new(big.Int).Set(r)
+	x3.Mul(x3, x3)
+	x3.Sub(x3, j)
+	x3.Sub(x3, v)
+	x3.Sub(x3, v)
+	x3.Mod(x3, BitCurve.P)
+
+	y3 := new(big.Int).Set(r)
+	v.Sub(v, x3)
+	y3.Mul(y3, v)
+	s1.Mul(s1, j)
+	s1.Lsh(s1, 1)
+	y3.Sub(y3, s1)
+	y3.Mod(y3, BitCurve.P)
+
+	z3 := new(big.Int).Add(z1, z2)
+	z3.Mul(z3, z3)
+	z3.Sub(z3, z1z1)
+	if z3.Sign() == -1 {
+		z3.Add(z3, BitCurve.P)
+	}
+	z3.Sub(z3, z2z2)
+	if z3.Sign() == -1 {
+		z3.Add(z3, BitCurve.P)
+	}
+	z3.Mul(z3, h)
+	z3.Mod(z3, BitCurve.P)
+
+	return x3, y3, z3
+}
+
+// Double returns 2*(x,y)
+func (BitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {
+	z1 := new(big.Int).SetInt64(1)
+	return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z1))
+}
+
+// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and
+// returns its double, also in Jacobian form.
+func (BitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) {
+	// See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
+
+	a := new(big.Int).Mul(x, x) //X1²
+	b := new(big.Int).Mul(y, y) //Y1²
+	c := new(big.Int).Mul(b, b) //B²
+
+	d := new(big.Int).Add(x, b) //X1+B
+	d.Mul(d, d)                 //(X1+B)²
+	d.Sub(d, a)                 //(X1+B)²-A
+	d.Sub(d, c)                 //(X1+B)²-A-C
+	d.Mul(d, big.NewInt(2))     //2*((X1+B)²-A-C)
+
+	e := new(big.Int).Mul(big.NewInt(3), a) //3*A
+	f := new(big.Int).Mul(e, e)             //E²
+
+	x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D
+	x3.Sub(f, x3)                            //F-2*D
+	x3.Mod(x3, BitCurve.P)
+
+	y3 := new(big.Int).Sub(d, x3)                  //D-X3
+	y3.Mul(e, y3)                                  //E*(D-X3)
+	y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C
+	y3.Mod(y3, BitCurve.P)
+
+	z3 := new(big.Int).Mul(y, z) //Y1*Z1
+	z3.Mul(big.NewInt(2), z3)    //3*Y1*Z1
+	z3.Mod(z3, BitCurve.P)
+
+	return x3, y3, z3
+}
+
+//TODO: double check if it is okay
+// ScalarMult returns k*(Bx,By) where k is a number in big-endian form.
+func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) {
+	// We have a slight problem in that the identity of the group (the
+	// point at infinity) cannot be represented in (x, y) form on a finite
+	// machine. Thus the standard add/double algorithm has to be tweaked
+	// slightly: our initial state is not the identity, but x, and we
+	// ignore the first true bit in |k|.  If we don't find any true bits in
+	// |k|, then we return nil, nil, because we cannot return the identity
+	// element.
+
+	Bz := new(big.Int).SetInt64(1)
+	x := Bx
+	y := By
+	z := Bz
+
+	seenFirstTrue := false
+	for _, byte := range k {
+		for bitNum := 0; bitNum < 8; bitNum++ {
+			if seenFirstTrue {
+				x, y, z = BitCurve.doubleJacobian(x, y, z)
+			}
+			if byte&0x80 == 0x80 {
+				if !seenFirstTrue {
+					seenFirstTrue = true
+				} else {
+					x, y, z = BitCurve.addJacobian(Bx, By, Bz, x, y, z)
+				}
+			}
+			byte <<= 1
+		}
+	}
+
+	if !seenFirstTrue {
+		return nil, nil
+	}
+
+	return BitCurve.affineFromJacobian(x, y, z)
+}
+
+// ScalarBaseMult returns k*G, where G is the base point of the group and k is
+// an integer in big-endian form.
+func (BitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {
+	return BitCurve.ScalarMult(BitCurve.Gx, BitCurve.Gy, k)
+}
+
+var mask = []byte{0xff, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f}
+
+//TODO: double check if it is okay
+// GenerateKey returns a public/private key pair. The private key is generated
+// using the given reader, which must return random data.
+func (BitCurve *BitCurve) GenerateKey(rand io.Reader) (priv []byte, x, y *big.Int, err error) {
+	byteLen := (BitCurve.BitSize + 7) >> 3
+	priv = make([]byte, byteLen)
+
+	for x == nil {
+		_, err = io.ReadFull(rand, priv)
+		if err != nil {
+			return
+		}
+		// We have to mask off any excess bits in the case that the size of the
+		// underlying field is not a whole number of bytes.
+		priv[0] &= mask[BitCurve.BitSize%8]
+		// This is because, in tests, rand will return all zeros and we don't
+		// want to get the point at infinity and loop forever.
+		priv[1] ^= 0x42
+		x, y = BitCurve.ScalarBaseMult(priv)
+	}
+	return
+}
+
+// Marshal converts a point into the form specified in section 4.3.6 of ANSI
+// X9.62.
+func (BitCurve *BitCurve) Marshal(x, y *big.Int) []byte {
+	byteLen := (BitCurve.BitSize + 7) >> 3
+
+	ret := make([]byte, 1+2*byteLen)
+	ret[0] = 4 // uncompressed point
+
+	xBytes := x.Bytes()
+	copy(ret[1+byteLen-len(xBytes):], xBytes)
+	yBytes := y.Bytes()
+	copy(ret[1+2*byteLen-len(yBytes):], yBytes)
+	return ret
+}
+
+// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On
+// error, x = nil.
+func (BitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) {
+	byteLen := (BitCurve.BitSize + 7) >> 3
+	if len(data) != 1+2*byteLen {
+		return
+	}
+	if data[0] != 4 { // uncompressed form
+		return
+	}
+	x = new(big.Int).SetBytes(data[1 : 1+byteLen])
+	y = new(big.Int).SetBytes(data[1+byteLen:])
+	return
+}
+
+//curve parameters taken from:
+//http://www.secg.org/collateral/sec2_final.pdf
+
+var initonce sync.Once
+var ecp160k1 *BitCurve
+var ecp192k1 *BitCurve
+var ecp224k1 *BitCurve
+var ecp256k1 *BitCurve
+
+func initAll() {
+	initS160()
+	initS192()
+	initS224()
+	initS256()
+}
+
+func initS160() {
+	// See SEC 2 section 2.4.1
+	ecp160k1 = new(BitCurve)
+	ecp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16)
+	ecp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16)
+	ecp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16)
+	ecp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16)
+	ecp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16)
+	ecp160k1.BitSize = 160
+}
+
+func initS192() {
+	// See SEC 2 section 2.5.1
+	ecp192k1 = new(BitCurve)
+	ecp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16)
+	ecp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16)
+	ecp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16)
+	ecp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16)
+	ecp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16)
+	ecp192k1.BitSize = 192
+}
+
+func initS224() {
+	// See SEC 2 section 2.6.1
+	ecp224k1 = new(BitCurve)
+	ecp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16)
+	ecp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16)
+	ecp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16)
+	ecp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16)
+	ecp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16)
+	ecp224k1.BitSize = 224
+}
+
+func initS256() {
+	// See SEC 2 section 2.7.1
+	ecp256k1 = new(BitCurve)
+	ecp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)
+	ecp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16)
+	ecp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16)
+	ecp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16)
+	ecp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16)
+	ecp256k1.BitSize = 256
+}
+
+// S160 returns a BitCurve which implements secp160k1 (see SEC 2 section 2.4.1)
+func S160() *BitCurve {
+	initonce.Do(initAll)
+	return ecp160k1
+}
+
+// S192 returns a BitCurve which implements secp192k1 (see SEC 2 section 2.5.1)
+func S192() *BitCurve {
+	initonce.Do(initAll)
+	return ecp192k1
+}
+
+// S224 returns a BitCurve which implements secp224k1 (see SEC 2 section 2.6.1)
+func S224() *BitCurve {
+	initonce.Do(initAll)
+	return ecp224k1
+}
+
+// S256 returns a BitCurve which implements secp256k1 (see SEC 2 section 2.7.1)
+func S256() *BitCurve {
+	initonce.Do(initAll)
+	return ecp256k1
+}
diff --git a/crypto/encrypt_decrypt_test.go b/crypto/encrypt_decrypt_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..85b43c406b61bd85cf0989fd5443cfc6706de2dc
--- /dev/null
+++ b/crypto/encrypt_decrypt_test.go
@@ -0,0 +1,40 @@
+package crypto
+
+import (
+	"bytes"
+	"fmt"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func TestBox(t *testing.T) {
+	prv1 := ToECDSA(ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f"))
+	prv2 := ToECDSA(ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a"))
+	pub2 := ToECDSAPub(ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5"))
+
+	message := []byte("Hello, world.")
+	ct, err := Encrypt(pub2, message)
+	if err != nil {
+		fmt.Println(err.Error())
+		t.FailNow()
+	}
+
+	pt, err := Decrypt(prv2, ct)
+	if err != nil {
+		fmt.Println(err.Error())
+		t.FailNow()
+	}
+
+	if !bytes.Equal(pt, message) {
+		fmt.Println("ecies: plaintext doesn't match message")
+		t.FailNow()
+	}
+
+	_, err = Decrypt(prv1, pt)
+	if err == nil {
+		fmt.Println("ecies: encryption should not have succeeded")
+		t.FailNow()
+	}
+
+}
diff --git a/crypto/key_manager.go b/crypto/key_manager.go
new file mode 100644
index 0000000000000000000000000000000000000000..326e559e0799582eecca630e0ba368ba5ba40b4c
--- /dev/null
+++ b/crypto/key_manager.go
@@ -0,0 +1,134 @@
+package crypto
+
+import (
+	"fmt"
+	"sync"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+)
+
+var keylogger = logger.NewLogger("KEY")
+
+type KeyManager struct {
+	keyRing  *KeyRing
+	session  string
+	keyStore KeyStore            // interface
+	keyRings map[string]*KeyRing // cache
+	keyPair  *KeyPair
+}
+
+func NewDBKeyManager(db ethutil.Database) *KeyManager {
+	return &KeyManager{keyStore: &DBKeyStore{db: db}, keyRings: make(map[string]*KeyRing)}
+}
+
+func NewFileKeyManager(basedir string) *KeyManager {
+	return &KeyManager{keyStore: &FileKeyStore{basedir: basedir}, keyRings: make(map[string]*KeyRing)}
+}
+
+func (k *KeyManager) KeyPair() *KeyPair {
+	return k.keyPair
+}
+
+func (k *KeyManager) KeyRing() *KeyPair {
+	return k.keyPair
+}
+
+func (k *KeyManager) PrivateKey() []byte {
+	return k.keyPair.PrivateKey
+}
+
+func (k *KeyManager) PublicKey() []byte {
+	return k.keyPair.PublicKey
+}
+
+func (k *KeyManager) Address() []byte {
+	return k.keyPair.Address()
+}
+
+func (k *KeyManager) save(session string, keyRing *KeyRing) error {
+	err := k.keyStore.Save(session, keyRing)
+	if err != nil {
+		return err
+	}
+	k.keyRings[session] = keyRing
+	return nil
+}
+
+func (k *KeyManager) load(session string) (*KeyRing, error) {
+	keyRing, found := k.keyRings[session]
+	if !found {
+		var err error
+		keyRing, err = k.keyStore.Load(session)
+		if err != nil {
+			return nil, err
+		}
+	}
+	return keyRing, nil
+}
+
+func cursorError(cursor int, len int) error {
+	return fmt.Errorf("cursor %d out of range (0..%d)", cursor, len)
+}
+
+func (k *KeyManager) reset(session string, cursor int, keyRing *KeyRing) error {
+	if cursor >= keyRing.Len() {
+		return cursorError(cursor, keyRing.Len())
+	}
+	lock := &sync.Mutex{}
+	lock.Lock()
+	defer lock.Unlock()
+	err := k.save(session, keyRing)
+	if err != nil {
+		return err
+	}
+	k.session = session
+	k.keyRing = keyRing
+	k.keyPair = keyRing.GetKeyPair(cursor)
+	return nil
+}
+
+func (k *KeyManager) SetCursor(cursor int) error {
+	if cursor >= k.keyRing.Len() {
+		return cursorError(cursor, k.keyRing.Len())
+	}
+	k.keyPair = k.keyRing.GetKeyPair(cursor)
+	return nil
+}
+
+func (k *KeyManager) Init(session string, cursor int, force bool) error {
+	var keyRing *KeyRing
+	if !force {
+		var err error
+		keyRing, err = k.load(session)
+		if err != nil {
+			return err
+		}
+	}
+	if keyRing == nil {
+		keyRing = NewGeneratedKeyRing(1)
+		keylogger.Infof("Created keypair. Private key: %x\n", keyRing.keys[0].PrivateKey)
+	}
+	return k.reset(session, cursor, keyRing)
+}
+
+func (k *KeyManager) InitFromSecretsFile(session string, cursor int, secretsfile string) error {
+	keyRing, err := NewKeyRingFromFile(secretsfile)
+	if err != nil {
+		return err
+	}
+	return k.reset(session, cursor, keyRing)
+}
+
+func (k *KeyManager) InitFromString(session string, cursor int, secrets string) error {
+	keyRing, err := NewKeyRingFromString(secrets)
+	if err != nil {
+		return err
+	}
+	return k.reset(session, cursor, keyRing)
+}
+
+func (k *KeyManager) Export(dir string) error {
+	fileKeyStore := FileKeyStore{dir}
+	return fileKeyStore.Save(k.session, k.keyRing)
+}
diff --git a/crypto/key_store.go b/crypto/key_store.go
new file mode 100644
index 0000000000000000000000000000000000000000..04560a04ed3a30bc74d5b154a81f824327eb1ad7
--- /dev/null
+++ b/crypto/key_store.go
@@ -0,0 +1,113 @@
+package crypto
+
+import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"path"
+	"strings"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type KeyStore interface {
+	Load(string) (*KeyRing, error)
+	Save(string, *KeyRing) error
+}
+
+type DBKeyStore struct {
+	db ethutil.Database
+}
+
+const dbKeyPrefix = "KeyRing"
+
+func (k *DBKeyStore) dbKey(session string) []byte {
+	return []byte(fmt.Sprintf("%s%s", dbKeyPrefix, session))
+}
+
+func (k *DBKeyStore) Save(session string, keyRing *KeyRing) error {
+	k.db.Put(k.dbKey(session), keyRing.RlpEncode())
+	return nil
+}
+
+func (k *DBKeyStore) Load(session string) (*KeyRing, error) {
+	data, err := k.db.Get(k.dbKey(session))
+	if err != nil {
+		return nil, nil
+	}
+	var keyRing *KeyRing
+	keyRing, err = NewKeyRingFromBytes(data)
+	if err != nil {
+		return nil, err
+	}
+	// if empty keyRing is found we return nil, no error
+	if keyRing.Len() == 0 {
+		return nil, nil
+	}
+	return keyRing, nil
+}
+
+type FileKeyStore struct {
+	basedir string
+}
+
+func (k *FileKeyStore) Save(session string, keyRing *KeyRing) error {
+	var content []byte
+	var err error
+	var privateKeys []string
+	var publicKeys []string
+	var mnemonics []string
+	var addresses []string
+	keyRing.Each(func(keyPair *KeyPair) {
+		privateKeys = append(privateKeys, ethutil.Bytes2Hex(keyPair.PrivateKey))
+		publicKeys = append(publicKeys, ethutil.Bytes2Hex(keyPair.PublicKey))
+		addresses = append(addresses, ethutil.Bytes2Hex(keyPair.Address()))
+		mnemonics = append(mnemonics, keyPair.Mnemonic())
+	})
+
+	basename := session
+	if session == "" {
+		basename = "default"
+	}
+
+	path := path.Join(k.basedir, basename)
+	content = []byte(strings.Join(privateKeys, "\n"))
+	err = ioutil.WriteFile(path+".prv", content, 0600)
+	if err != nil {
+		return err
+	}
+
+	content = []byte(strings.Join(publicKeys, "\n"))
+	err = ioutil.WriteFile(path+".pub", content, 0644)
+	if err != nil {
+		return err
+	}
+
+	content = []byte(strings.Join(addresses, "\n"))
+	err = ioutil.WriteFile(path+".addr", content, 0644)
+	if err != nil {
+		return err
+	}
+
+	content = []byte(strings.Join(mnemonics, "\n"))
+	err = ioutil.WriteFile(path+".mne", content, 0600)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (k *FileKeyStore) Load(session string) (*KeyRing, error) {
+	basename := session
+	if session == "" {
+		basename = "default"
+	}
+	secfile := path.Join(k.basedir, basename+".prv")
+	_, err := os.Stat(secfile)
+	// if file is not found then we return nil, no error
+	if err != nil {
+		return nil, nil
+	}
+	return NewKeyRingFromFile(secfile)
+}
diff --git a/crypto/keypair.go b/crypto/keypair.go
new file mode 100644
index 0000000000000000000000000000000000000000..d02875dedcf7924e950efa9ec5d4736de13c9fad
--- /dev/null
+++ b/crypto/keypair.go
@@ -0,0 +1,58 @@
+package crypto
+
+import (
+	"strings"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/obscuren/secp256k1-go"
+)
+
+type KeyPair struct {
+	PrivateKey []byte
+	PublicKey  []byte
+	address    []byte
+	mnemonic   string
+	// The associated account
+	// account *StateObject
+}
+
+func GenerateNewKeyPair() *KeyPair {
+	_, prv := secp256k1.GenerateKeyPair()
+	keyPair, _ := NewKeyPairFromSec(prv) // swallow error, this one cannot err
+	return keyPair
+}
+
+func NewKeyPairFromSec(seckey []byte) (*KeyPair, error) {
+	pubkey, err := secp256k1.GeneratePubKey(seckey)
+	if err != nil {
+		return nil, err
+	}
+
+	return &KeyPair{PrivateKey: seckey, PublicKey: pubkey}, nil
+}
+
+func (k *KeyPair) Address() []byte {
+	if k.address == nil {
+		k.address = Sha3(k.PublicKey[1:])[12:]
+	}
+	return k.address
+}
+
+func (k *KeyPair) Mnemonic() string {
+	if k.mnemonic == "" {
+		k.mnemonic = strings.Join(MnemonicEncode(ethutil.Bytes2Hex(k.PrivateKey)), " ")
+	}
+	return k.mnemonic
+}
+
+func (k *KeyPair) AsStrings() (string, string, string, string) {
+	return k.Mnemonic(), ethutil.Bytes2Hex(k.Address()), ethutil.Bytes2Hex(k.PrivateKey), ethutil.Bytes2Hex(k.PublicKey)
+}
+
+func (k *KeyPair) RlpEncode() []byte {
+	return k.RlpValue().Encode()
+}
+
+func (k *KeyPair) RlpValue() *ethutil.Value {
+	return ethutil.NewValue(k.PrivateKey)
+}
diff --git a/crypto/keyring.go b/crypto/keyring.go
new file mode 100644
index 0000000000000000000000000000000000000000..eab13dbc4bab0b6a78672c27305a74cadd36b0ca
--- /dev/null
+++ b/crypto/keyring.go
@@ -0,0 +1,123 @@
+package crypto
+
+import (
+	"fmt"
+	"io/ioutil"
+	"strings"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type KeyRing struct {
+	keys []*KeyPair
+}
+
+func NewKeyRing() *KeyRing {
+	return &KeyRing{}
+}
+
+func (k *KeyRing) AddKeyPair(keyPair *KeyPair) {
+	k.keys = append(k.keys, keyPair)
+}
+
+func (k *KeyRing) GetKeyPair(i int) *KeyPair {
+	if len(k.keys) > i {
+		return k.keys[i]
+	}
+
+	return nil
+}
+
+func (k *KeyRing) Empty() bool {
+	return k.Len() == 0
+}
+
+func (k *KeyRing) Len() int {
+	return len(k.keys)
+}
+
+func (k *KeyRing) Each(f func(*KeyPair)) {
+	for _, keyPair := range k.keys {
+		f(keyPair)
+	}
+}
+
+func NewGeneratedKeyRing(len int) *KeyRing {
+	keyRing := NewKeyRing()
+	for i := 0; i < len; i++ {
+		keyRing.AddKeyPair(GenerateNewKeyPair())
+	}
+	return keyRing
+}
+
+func NewKeyRingFromFile(secfile string) (*KeyRing, error) {
+	var content []byte
+	var err error
+	content, err = ioutil.ReadFile(secfile)
+	if err != nil {
+		return nil, err
+	}
+	keyRing, err := NewKeyRingFromString(string(content))
+	if err != nil {
+		return nil, err
+	}
+	return keyRing, nil
+}
+
+func NewKeyRingFromString(content string) (*KeyRing, error) {
+	secretStrings := strings.Split(content, "\n")
+	var secrets [][]byte
+	for _, secretString := range secretStrings {
+		secret := secretString
+		words := strings.Split(secretString, " ")
+		if len(words) == 24 {
+			secret = MnemonicDecode(words)
+		} else if len(words) != 1 {
+			return nil, fmt.Errorf("Unrecognised key format")
+		}
+
+		if len(secret) != 0 {
+			secrets = append(secrets, ethutil.Hex2Bytes(secret))
+		}
+	}
+
+	return NewKeyRingFromSecrets(secrets)
+}
+
+func NewKeyRingFromSecrets(secs [][]byte) (*KeyRing, error) {
+	keyRing := NewKeyRing()
+	for _, sec := range secs {
+		keyPair, err := NewKeyPairFromSec(sec)
+		if err != nil {
+			return nil, err
+		}
+		keyRing.AddKeyPair(keyPair)
+	}
+	return keyRing, nil
+}
+
+func NewKeyRingFromBytes(data []byte) (*KeyRing, error) {
+	var secrets [][]byte
+	it := ethutil.NewValueFromBytes(data).NewIterator()
+	for it.Next() {
+		secret := it.Value().Bytes()
+		secrets = append(secrets, secret)
+	}
+	keyRing, err := NewKeyRingFromSecrets(secrets)
+	if err != nil {
+		return nil, err
+	}
+	return keyRing, nil
+}
+
+func (k *KeyRing) RlpEncode() []byte {
+	return k.RlpValue().Encode()
+}
+
+func (k *KeyRing) RlpValue() *ethutil.Value {
+	v := ethutil.EmptyValue()
+	k.Each(func(keyPair *KeyPair) {
+		v.Append(keyPair.RlpValue())
+	})
+	return v
+}
diff --git a/crypto/keys_test.go b/crypto/keys_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..56e85196969d342f3df157124cdbf6c741c13b79
--- /dev/null
+++ b/crypto/keys_test.go
@@ -0,0 +1,122 @@
+package crypto
+
+// import (
+// 	"github.com/ethereum/go-ethereum/ethdb"
+// 	// "io/ioutil"
+// 	"fmt"
+// 	"os"
+// 	"path"
+// 	"testing"
+// )
+
+// // test if persistence layer works
+// func TestDBKeyManager(t *testing.T) {
+// 	memdb, _ := ethdb.NewMemDatabase()
+// 	keyManager0 := NewDBKeyManager(memdb)
+// 	err := keyManager0.Init("", 0, false)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	keyManager1 := NewDBKeyManager(memdb)
+// 	err = keyManager1.Init("", 0, false)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) {
+// 		t.Error("Expected private keys %x, %x, to be identical via db persistence", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	}
+// 	err = keyManager1.Init("", 0, true)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	if string(keyManager0.PrivateKey()) == string(keyManager1.PrivateKey()) {
+// 		t.Error("Expected private keys %x, %x, to be be different despite db persistence if force generate", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	}
+// }
+
+// func TestFileKeyManager(t *testing.T) {
+// 	basedir0 := "/tmp/ethtest0"
+// 	os.RemoveAll(basedir0)
+// 	os.Mkdir(basedir0, 0777)
+
+// 	keyManager0 := NewFileKeyManager(basedir0)
+// 	err := keyManager0.Init("", 0, false)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+
+// 	keyManager1 := NewFileKeyManager(basedir0)
+
+// 	err = keyManager1.Init("", 0, false)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) {
+// 		t.Error("Expected private keys %x, %x, to be identical via db persistence", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	}
+
+// 	err = keyManager1.Init("", 0, true)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	if string(keyManager0.PrivateKey()) == string(keyManager1.PrivateKey()) {
+// 		t.Error("Expected private keys %x, %x, to be be different despite db persistence if force generate", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	}
+// }
+
+// // cursor errors
+// func TestCursorErrors(t *testing.T) {
+// 	memdb, _ := ethdb.NewMemDatabase()
+// 	keyManager0 := NewDBKeyManager(memdb)
+// 	err := keyManager0.Init("", 0, false)
+// 	err = keyManager0.Init("", 1, false)
+// 	if err == nil {
+// 		t.Error("Expected cursor error")
+// 	}
+// 	err = keyManager0.SetCursor(1)
+// 	if err == nil {
+// 		t.Error("Expected cursor error")
+// 	}
+// }
+
+// func TestExportImport(t *testing.T) {
+// 	memdb, _ := ethdb.NewMemDatabase()
+// 	keyManager0 := NewDBKeyManager(memdb)
+// 	err := keyManager0.Init("", 0, false)
+// 	basedir0 := "/tmp/ethtest0"
+// 	os.RemoveAll(basedir0)
+// 	os.Mkdir(basedir0, 0777)
+// 	keyManager0.Export(basedir0)
+
+// 	keyManager1 := NewFileKeyManager(basedir0)
+// 	err = keyManager1.Init("", 0, false)
+// 	if err != nil {
+// 		t.Error("Unexpected error: ", err)
+// 	}
+// 	fmt.Printf("keyRing: %v\n", keyManager0.KeyPair())
+// 	fmt.Printf("keyRing: %v\n", keyManager1.KeyPair())
+// 	if string(keyManager0.PrivateKey()) != string(keyManager1.PrivateKey()) {
+// 		t.Error("Expected private keys %x, %x, to be identical via export to filestore basedir", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	}
+// 	path.Join("")
+
+// 	// memdb, _ = ethdb.NewMemDatabase()
+// 	// keyManager2 := NewDBKeyManager(memdb)
+// 	// err = keyManager2.InitFromSecretsFile("", 0, path.Join(basedir0, "default.prv"))
+// 	// if err != nil {
+// 	// 	t.Error("Unexpected error: ", err)
+// 	// }
+// 	// if string(keyManager0.PrivateKey()) != string(keyManager2.PrivateKey()) {
+// 	// 	t.Error("Expected private keys %s, %s, to be identical via export/import prv", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	// }
+
+// 	// memdb, _ = ethdb.NewMemDatabase()
+// 	// keyManager3 := NewDBKeyManager(memdb)
+// 	// err = keyManager3.InitFromSecretsFile("", 0, path.Join(basedir0, "default.mne"))
+// 	// if err != nil {
+// 	// 	t.Error("Unexpected error: ", err)
+// 	// }
+// 	// if string(keyManager0.PrivateKey()) != string(keyManager3.PrivateKey()) {
+// 	// 	t.Error("Expected private keys %s, %s, to be identical via export/import mnemonic file", keyManager0.PrivateKey(), keyManager1.PrivateKey())
+// 	// }
+// }
diff --git a/crypto/mnemonic.go b/crypto/mnemonic.go
new file mode 100644
index 0000000000000000000000000000000000000000..0d690f2453d93889a78fb9c7fa111e90440d0e32
--- /dev/null
+++ b/crypto/mnemonic.go
@@ -0,0 +1,60 @@
+package crypto
+
+import (
+	"fmt"
+	"strconv"
+)
+
+// TODO: See if we can refactor this into a shared util lib if we need it multiple times
+func IndexOf(slice []string, value string) int64 {
+	for p, v := range slice {
+		if v == value {
+			return int64(p)
+		}
+	}
+	return -1
+}
+
+func MnemonicEncode(message string) []string {
+	var out []string
+	n := int64(len(MnemonicWords))
+
+	for i := 0; i < len(message); i += (len(message) / 8) {
+		x := message[i : i+8]
+		bit, _ := strconv.ParseInt(x, 16, 64)
+		w1 := (bit % n)
+		w2 := ((bit / n) + w1) % n
+		w3 := ((bit / n / n) + w2) % n
+		out = append(out, MnemonicWords[w1], MnemonicWords[w2], MnemonicWords[w3])
+	}
+	return out
+}
+
+func MnemonicDecode(wordsar []string) string {
+	var out string
+	n := int64(len(MnemonicWords))
+
+	for i := 0; i < len(wordsar); i += 3 {
+		word1 := wordsar[i]
+		word2 := wordsar[i+1]
+		word3 := wordsar[i+2]
+		w1 := IndexOf(MnemonicWords, word1)
+		w2 := IndexOf(MnemonicWords, word2)
+		w3 := IndexOf(MnemonicWords, word3)
+
+		y := (w2 - w1) % n
+		z := (w3 - w2) % n
+
+		// Golang handles modulo with negative numbers different then most languages
+		// The modulo can be negative, we don't want that.
+		if z < 0 {
+			z += n
+		}
+		if y < 0 {
+			y += n
+		}
+		x := w1 + n*(y) + n*n*(z)
+		out += fmt.Sprintf("%08x", x)
+	}
+	return out
+}
diff --git a/crypto/mnemonic_test.go b/crypto/mnemonic_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..beff476e08b5b3ef6a6de85d4f1305d16ad0abc5
--- /dev/null
+++ b/crypto/mnemonic_test.go
@@ -0,0 +1,74 @@
+package crypto
+
+import (
+	"testing"
+)
+
+func TestMnDecode(t *testing.T) {
+	words := []string{
+		"ink",
+		"balance",
+		"gain",
+		"fear",
+		"happen",
+		"melt",
+		"mom",
+		"surface",
+		"stir",
+		"bottle",
+		"unseen",
+		"expression",
+		"important",
+		"curl",
+		"grant",
+		"fairy",
+		"across",
+		"back",
+		"figure",
+		"breast",
+		"nobody",
+		"scratch",
+		"worry",
+		"yesterday",
+	}
+	encode := "c61d43dc5bb7a4e754d111dae8105b6f25356492df5e50ecb33b858d94f8c338"
+	result := MnemonicDecode(words)
+	if encode != result {
+		t.Error("We expected", encode, "got", result, "instead")
+	}
+}
+func TestMnEncode(t *testing.T) {
+	encode := "c61d43dc5bb7a4e754d111dae8105b6f25356492df5e50ecb33b858d94f8c338"
+	result := []string{
+		"ink",
+		"balance",
+		"gain",
+		"fear",
+		"happen",
+		"melt",
+		"mom",
+		"surface",
+		"stir",
+		"bottle",
+		"unseen",
+		"expression",
+		"important",
+		"curl",
+		"grant",
+		"fairy",
+		"across",
+		"back",
+		"figure",
+		"breast",
+		"nobody",
+		"scratch",
+		"worry",
+		"yesterday",
+	}
+	words := MnemonicEncode(encode)
+	for i, word := range words {
+		if word != result[i] {
+			t.Error("Mnenonic does not match:", words, result)
+		}
+	}
+}
diff --git a/crypto/mnemonic_words.go b/crypto/mnemonic_words.go
new file mode 100644
index 0000000000000000000000000000000000000000..ebd0d26907b1bccb3becf2ea1d85d175b1f77a92
--- /dev/null
+++ b/crypto/mnemonic_words.go
@@ -0,0 +1,1630 @@
+package crypto
+
+var MnemonicWords []string = []string{
+	"like",
+	"just",
+	"love",
+	"know",
+	"never",
+	"want",
+	"time",
+	"out",
+	"there",
+	"make",
+	"look",
+	"eye",
+	"down",
+	"only",
+	"think",
+	"heart",
+	"back",
+	"then",
+	"into",
+	"about",
+	"more",
+	"away",
+	"still",
+	"them",
+	"take",
+	"thing",
+	"even",
+	"through",
+	"long",
+	"always",
+	"world",
+	"too",
+	"friend",
+	"tell",
+	"try",
+	"hand",
+	"thought",
+	"over",
+	"here",
+	"other",
+	"need",
+	"smile",
+	"again",
+	"much",
+	"cry",
+	"been",
+	"night",
+	"ever",
+	"little",
+	"said",
+	"end",
+	"some",
+	"those",
+	"around",
+	"mind",
+	"people",
+	"girl",
+	"leave",
+	"dream",
+	"left",
+	"turn",
+	"myself",
+	"give",
+	"nothing",
+	"really",
+	"off",
+	"before",
+	"something",
+	"find",
+	"walk",
+	"wish",
+	"good",
+	"once",
+	"place",
+	"ask",
+	"stop",
+	"keep",
+	"watch",
+	"seem",
+	"everything",
+	"wait",
+	"got",
+	"yet",
+	"made",
+	"remember",
+	"start",
+	"alone",
+	"run",
+	"hope",
+	"maybe",
+	"believe",
+	"body",
+	"hate",
+	"after",
+	"close",
+	"talk",
+	"stand",
+	"own",
+	"each",
+	"hurt",
+	"help",
+	"home",
+	"god",
+	"soul",
+	"new",
+	"many",
+	"two",
+	"inside",
+	"should",
+	"true",
+	"first",
+	"fear",
+	"mean",
+	"better",
+	"play",
+	"another",
+	"gone",
+	"change",
+	"use",
+	"wonder",
+	"someone",
+	"hair",
+	"cold",
+	"open",
+	"best",
+	"any",
+	"behind",
+	"happen",
+	"water",
+	"dark",
+	"laugh",
+	"stay",
+	"forever",
+	"name",
+	"work",
+	"show",
+	"sky",
+	"break",
+	"came",
+	"deep",
+	"door",
+	"put",
+	"black",
+	"together",
+	"upon",
+	"happy",
+	"such",
+	"great",
+	"white",
+	"matter",
+	"fill",
+	"past",
+	"please",
+	"burn",
+	"cause",
+	"enough",
+	"touch",
+	"moment",
+	"soon",
+	"voice",
+	"scream",
+	"anything",
+	"stare",
+	"sound",
+	"red",
+	"everyone",
+	"hide",
+	"kiss",
+	"truth",
+	"death",
+	"beautiful",
+	"mine",
+	"blood",
+	"broken",
+	"very",
+	"pass",
+	"next",
+	"forget",
+	"tree",
+	"wrong",
+	"air",
+	"mother",
+	"understand",
+	"lip",
+	"hit",
+	"wall",
+	"memory",
+	"sleep",
+	"free",
+	"high",
+	"realize",
+	"school",
+	"might",
+	"skin",
+	"sweet",
+	"perfect",
+	"blue",
+	"kill",
+	"breath",
+	"dance",
+	"against",
+	"fly",
+	"between",
+	"grow",
+	"strong",
+	"under",
+	"listen",
+	"bring",
+	"sometimes",
+	"speak",
+	"pull",
+	"person",
+	"become",
+	"family",
+	"begin",
+	"ground",
+	"real",
+	"small",
+	"father",
+	"sure",
+	"feet",
+	"rest",
+	"young",
+	"finally",
+	"land",
+	"across",
+	"today",
+	"different",
+	"guy",
+	"line",
+	"fire",
+	"reason",
+	"reach",
+	"second",
+	"slowly",
+	"write",
+	"eat",
+	"smell",
+	"mouth",
+	"step",
+	"learn",
+	"three",
+	"floor",
+	"promise",
+	"breathe",
+	"darkness",
+	"push",
+	"earth",
+	"guess",
+	"save",
+	"song",
+	"above",
+	"along",
+	"both",
+	"color",
+	"house",
+	"almost",
+	"sorry",
+	"anymore",
+	"brother",
+	"okay",
+	"dear",
+	"game",
+	"fade",
+	"already",
+	"apart",
+	"warm",
+	"beauty",
+	"heard",
+	"notice",
+	"question",
+	"shine",
+	"began",
+	"piece",
+	"whole",
+	"shadow",
+	"secret",
+	"street",
+	"within",
+	"finger",
+	"point",
+	"morning",
+	"whisper",
+	"child",
+	"moon",
+	"green",
+	"story",
+	"glass",
+	"kid",
+	"silence",
+	"since",
+	"soft",
+	"yourself",
+	"empty",
+	"shall",
+	"angel",
+	"answer",
+	"baby",
+	"bright",
+	"dad",
+	"path",
+	"worry",
+	"hour",
+	"drop",
+	"follow",
+	"power",
+	"war",
+	"half",
+	"flow",
+	"heaven",
+	"act",
+	"chance",
+	"fact",
+	"least",
+	"tired",
+	"children",
+	"near",
+	"quite",
+	"afraid",
+	"rise",
+	"sea",
+	"taste",
+	"window",
+	"cover",
+	"nice",
+	"trust",
+	"lot",
+	"sad",
+	"cool",
+	"force",
+	"peace",
+	"return",
+	"blind",
+	"easy",
+	"ready",
+	"roll",
+	"rose",
+	"drive",
+	"held",
+	"music",
+	"beneath",
+	"hang",
+	"mom",
+	"paint",
+	"emotion",
+	"quiet",
+	"clear",
+	"cloud",
+	"few",
+	"pretty",
+	"bird",
+	"outside",
+	"paper",
+	"picture",
+	"front",
+	"rock",
+	"simple",
+	"anyone",
+	"meant",
+	"reality",
+	"road",
+	"sense",
+	"waste",
+	"bit",
+	"leaf",
+	"thank",
+	"happiness",
+	"meet",
+	"men",
+	"smoke",
+	"truly",
+	"decide",
+	"self",
+	"age",
+	"book",
+	"form",
+	"alive",
+	"carry",
+	"escape",
+	"damn",
+	"instead",
+	"able",
+	"ice",
+	"minute",
+	"throw",
+	"catch",
+	"leg",
+	"ring",
+	"course",
+	"goodbye",
+	"lead",
+	"poem",
+	"sick",
+	"corner",
+	"desire",
+	"known",
+	"problem",
+	"remind",
+	"shoulder",
+	"suppose",
+	"toward",
+	"wave",
+	"drink",
+	"jump",
+	"woman",
+	"pretend",
+	"sister",
+	"week",
+	"human",
+	"joy",
+	"crack",
+	"grey",
+	"pray",
+	"surprise",
+	"dry",
+	"knee",
+	"less",
+	"search",
+	"bleed",
+	"caught",
+	"clean",
+	"embrace",
+	"future",
+	"king",
+	"son",
+	"sorrow",
+	"chest",
+	"hug",
+	"remain",
+	"sat",
+	"worth",
+	"blow",
+	"daddy",
+	"final",
+	"parent",
+	"tight",
+	"also",
+	"create",
+	"lonely",
+	"safe",
+	"cross",
+	"dress",
+	"evil",
+	"silent",
+	"bone",
+	"fate",
+	"perhaps",
+	"anger",
+	"class",
+	"scar",
+	"snow",
+	"tiny",
+	"tonight",
+	"continue",
+	"control",
+	"dog",
+	"edge",
+	"mirror",
+	"month",
+	"suddenly",
+	"comfort",
+	"given",
+	"loud",
+	"quickly",
+	"gaze",
+	"plan",
+	"rush",
+	"stone",
+	"town",
+	"battle",
+	"ignore",
+	"spirit",
+	"stood",
+	"stupid",
+	"yours",
+	"brown",
+	"build",
+	"dust",
+	"hey",
+	"kept",
+	"pay",
+	"phone",
+	"twist",
+	"although",
+	"ball",
+	"beyond",
+	"hidden",
+	"nose",
+	"taken",
+	"fail",
+	"float",
+	"pure",
+	"somehow",
+	"wash",
+	"wrap",
+	"angry",
+	"cheek",
+	"creature",
+	"forgotten",
+	"heat",
+	"rip",
+	"single",
+	"space",
+	"special",
+	"weak",
+	"whatever",
+	"yell",
+	"anyway",
+	"blame",
+	"job",
+	"choose",
+	"country",
+	"curse",
+	"drift",
+	"echo",
+	"figure",
+	"grew",
+	"laughter",
+	"neck",
+	"suffer",
+	"worse",
+	"yeah",
+	"disappear",
+	"foot",
+	"forward",
+	"knife",
+	"mess",
+	"somewhere",
+	"stomach",
+	"storm",
+	"beg",
+	"idea",
+	"lift",
+	"offer",
+	"breeze",
+	"field",
+	"five",
+	"often",
+	"simply",
+	"stuck",
+	"win",
+	"allow",
+	"confuse",
+	"enjoy",
+	"except",
+	"flower",
+	"seek",
+	"strength",
+	"calm",
+	"grin",
+	"gun",
+	"heavy",
+	"hill",
+	"large",
+	"ocean",
+	"shoe",
+	"sigh",
+	"straight",
+	"summer",
+	"tongue",
+	"accept",
+	"crazy",
+	"everyday",
+	"exist",
+	"grass",
+	"mistake",
+	"sent",
+	"shut",
+	"surround",
+	"table",
+	"ache",
+	"brain",
+	"destroy",
+	"heal",
+	"nature",
+	"shout",
+	"sign",
+	"stain",
+	"choice",
+	"doubt",
+	"glance",
+	"glow",
+	"mountain",
+	"queen",
+	"stranger",
+	"throat",
+	"tomorrow",
+	"city",
+	"either",
+	"fish",
+	"flame",
+	"rather",
+	"shape",
+	"spin",
+	"spread",
+	"ash",
+	"distance",
+	"finish",
+	"image",
+	"imagine",
+	"important",
+	"nobody",
+	"shatter",
+	"warmth",
+	"became",
+	"feed",
+	"flesh",
+	"funny",
+	"lust",
+	"shirt",
+	"trouble",
+	"yellow",
+	"attention",
+	"bare",
+	"bite",
+	"money",
+	"protect",
+	"amaze",
+	"appear",
+	"born",
+	"choke",
+	"completely",
+	"daughter",
+	"fresh",
+	"friendship",
+	"gentle",
+	"probably",
+	"six",
+	"deserve",
+	"expect",
+	"grab",
+	"middle",
+	"nightmare",
+	"river",
+	"thousand",
+	"weight",
+	"worst",
+	"wound",
+	"barely",
+	"bottle",
+	"cream",
+	"regret",
+	"relationship",
+	"stick",
+	"test",
+	"crush",
+	"endless",
+	"fault",
+	"itself",
+	"rule",
+	"spill",
+	"art",
+	"circle",
+	"join",
+	"kick",
+	"mask",
+	"master",
+	"passion",
+	"quick",
+	"raise",
+	"smooth",
+	"unless",
+	"wander",
+	"actually",
+	"broke",
+	"chair",
+	"deal",
+	"favorite",
+	"gift",
+	"note",
+	"number",
+	"sweat",
+	"box",
+	"chill",
+	"clothes",
+	"lady",
+	"mark",
+	"park",
+	"poor",
+	"sadness",
+	"tie",
+	"animal",
+	"belong",
+	"brush",
+	"consume",
+	"dawn",
+	"forest",
+	"innocent",
+	"pen",
+	"pride",
+	"stream",
+	"thick",
+	"clay",
+	"complete",
+	"count",
+	"draw",
+	"faith",
+	"press",
+	"silver",
+	"struggle",
+	"surface",
+	"taught",
+	"teach",
+	"wet",
+	"bless",
+	"chase",
+	"climb",
+	"enter",
+	"letter",
+	"melt",
+	"metal",
+	"movie",
+	"stretch",
+	"swing",
+	"vision",
+	"wife",
+	"beside",
+	"crash",
+	"forgot",
+	"guide",
+	"haunt",
+	"joke",
+	"knock",
+	"plant",
+	"pour",
+	"prove",
+	"reveal",
+	"steal",
+	"stuff",
+	"trip",
+	"wood",
+	"wrist",
+	"bother",
+	"bottom",
+	"crawl",
+	"crowd",
+	"fix",
+	"forgive",
+	"frown",
+	"grace",
+	"loose",
+	"lucky",
+	"party",
+	"release",
+	"surely",
+	"survive",
+	"teacher",
+	"gently",
+	"grip",
+	"speed",
+	"suicide",
+	"travel",
+	"treat",
+	"vein",
+	"written",
+	"cage",
+	"chain",
+	"conversation",
+	"date",
+	"enemy",
+	"however",
+	"interest",
+	"million",
+	"page",
+	"pink",
+	"proud",
+	"sway",
+	"themselves",
+	"winter",
+	"church",
+	"cruel",
+	"cup",
+	"demon",
+	"experience",
+	"freedom",
+	"pair",
+	"pop",
+	"purpose",
+	"respect",
+	"shoot",
+	"softly",
+	"state",
+	"strange",
+	"bar",
+	"birth",
+	"curl",
+	"dirt",
+	"excuse",
+	"lord",
+	"lovely",
+	"monster",
+	"order",
+	"pack",
+	"pants",
+	"pool",
+	"scene",
+	"seven",
+	"shame",
+	"slide",
+	"ugly",
+	"among",
+	"blade",
+	"blonde",
+	"closet",
+	"creek",
+	"deny",
+	"drug",
+	"eternity",
+	"gain",
+	"grade",
+	"handle",
+	"key",
+	"linger",
+	"pale",
+	"prepare",
+	"swallow",
+	"swim",
+	"tremble",
+	"wheel",
+	"won",
+	"cast",
+	"cigarette",
+	"claim",
+	"college",
+	"direction",
+	"dirty",
+	"gather",
+	"ghost",
+	"hundred",
+	"loss",
+	"lung",
+	"orange",
+	"present",
+	"swear",
+	"swirl",
+	"twice",
+	"wild",
+	"bitter",
+	"blanket",
+	"doctor",
+	"everywhere",
+	"flash",
+	"grown",
+	"knowledge",
+	"numb",
+	"pressure",
+	"radio",
+	"repeat",
+	"ruin",
+	"spend",
+	"unknown",
+	"buy",
+	"clock",
+	"devil",
+	"early",
+	"false",
+	"fantasy",
+	"pound",
+	"precious",
+	"refuse",
+	"sheet",
+	"teeth",
+	"welcome",
+	"add",
+	"ahead",
+	"block",
+	"bury",
+	"caress",
+	"content",
+	"depth",
+	"despite",
+	"distant",
+	"marry",
+	"purple",
+	"threw",
+	"whenever",
+	"bomb",
+	"dull",
+	"easily",
+	"grasp",
+	"hospital",
+	"innocence",
+	"normal",
+	"receive",
+	"reply",
+	"rhyme",
+	"shade",
+	"someday",
+	"sword",
+	"toe",
+	"visit",
+	"asleep",
+	"bought",
+	"center",
+	"consider",
+	"flat",
+	"hero",
+	"history",
+	"ink",
+	"insane",
+	"muscle",
+	"mystery",
+	"pocket",
+	"reflection",
+	"shove",
+	"silently",
+	"smart",
+	"soldier",
+	"spot",
+	"stress",
+	"train",
+	"type",
+	"view",
+	"whether",
+	"bus",
+	"energy",
+	"explain",
+	"holy",
+	"hunger",
+	"inch",
+	"magic",
+	"mix",
+	"noise",
+	"nowhere",
+	"prayer",
+	"presence",
+	"shock",
+	"snap",
+	"spider",
+	"study",
+	"thunder",
+	"trail",
+	"admit",
+	"agree",
+	"bag",
+	"bang",
+	"bound",
+	"butterfly",
+	"cute",
+	"exactly",
+	"explode",
+	"familiar",
+	"fold",
+	"further",
+	"pierce",
+	"reflect",
+	"scent",
+	"selfish",
+	"sharp",
+	"sink",
+	"spring",
+	"stumble",
+	"universe",
+	"weep",
+	"women",
+	"wonderful",
+	"action",
+	"ancient",
+	"attempt",
+	"avoid",
+	"birthday",
+	"branch",
+	"chocolate",
+	"core",
+	"depress",
+	"drunk",
+	"especially",
+	"focus",
+	"fruit",
+	"honest",
+	"match",
+	"palm",
+	"perfectly",
+	"pillow",
+	"pity",
+	"poison",
+	"roar",
+	"shift",
+	"slightly",
+	"thump",
+	"truck",
+	"tune",
+	"twenty",
+	"unable",
+	"wipe",
+	"wrote",
+	"coat",
+	"constant",
+	"dinner",
+	"drove",
+	"egg",
+	"eternal",
+	"flight",
+	"flood",
+	"frame",
+	"freak",
+	"gasp",
+	"glad",
+	"hollow",
+	"motion",
+	"peer",
+	"plastic",
+	"root",
+	"screen",
+	"season",
+	"sting",
+	"strike",
+	"team",
+	"unlike",
+	"victim",
+	"volume",
+	"warn",
+	"weird",
+	"attack",
+	"await",
+	"awake",
+	"built",
+	"charm",
+	"crave",
+	"despair",
+	"fought",
+	"grant",
+	"grief",
+	"horse",
+	"limit",
+	"message",
+	"ripple",
+	"sanity",
+	"scatter",
+	"serve",
+	"split",
+	"string",
+	"trick",
+	"annoy",
+	"blur",
+	"boat",
+	"brave",
+	"clearly",
+	"cling",
+	"connect",
+	"fist",
+	"forth",
+	"imagination",
+	"iron",
+	"jock",
+	"judge",
+	"lesson",
+	"milk",
+	"misery",
+	"nail",
+	"naked",
+	"ourselves",
+	"poet",
+	"possible",
+	"princess",
+	"sail",
+	"size",
+	"snake",
+	"society",
+	"stroke",
+	"torture",
+	"toss",
+	"trace",
+	"wise",
+	"bloom",
+	"bullet",
+	"cell",
+	"check",
+	"cost",
+	"darling",
+	"during",
+	"footstep",
+	"fragile",
+	"hallway",
+	"hardly",
+	"horizon",
+	"invisible",
+	"journey",
+	"midnight",
+	"mud",
+	"nod",
+	"pause",
+	"relax",
+	"shiver",
+	"sudden",
+	"value",
+	"youth",
+	"abuse",
+	"admire",
+	"blink",
+	"breast",
+	"bruise",
+	"constantly",
+	"couple",
+	"creep",
+	"curve",
+	"difference",
+	"dumb",
+	"emptiness",
+	"gotta",
+	"honor",
+	"plain",
+	"planet",
+	"recall",
+	"rub",
+	"ship",
+	"slam",
+	"soar",
+	"somebody",
+	"tightly",
+	"weather",
+	"adore",
+	"approach",
+	"bond",
+	"bread",
+	"burst",
+	"candle",
+	"coffee",
+	"cousin",
+	"crime",
+	"desert",
+	"flutter",
+	"frozen",
+	"grand",
+	"heel",
+	"hello",
+	"language",
+	"level",
+	"movement",
+	"pleasure",
+	"powerful",
+	"random",
+	"rhythm",
+	"settle",
+	"silly",
+	"slap",
+	"sort",
+	"spoken",
+	"steel",
+	"threaten",
+	"tumble",
+	"upset",
+	"aside",
+	"awkward",
+	"bee",
+	"blank",
+	"board",
+	"button",
+	"card",
+	"carefully",
+	"complain",
+	"crap",
+	"deeply",
+	"discover",
+	"drag",
+	"dread",
+	"effort",
+	"entire",
+	"fairy",
+	"giant",
+	"gotten",
+	"greet",
+	"illusion",
+	"jeans",
+	"leap",
+	"liquid",
+	"march",
+	"mend",
+	"nervous",
+	"nine",
+	"replace",
+	"rope",
+	"spine",
+	"stole",
+	"terror",
+	"accident",
+	"apple",
+	"balance",
+	"boom",
+	"childhood",
+	"collect",
+	"demand",
+	"depression",
+	"eventually",
+	"faint",
+	"glare",
+	"goal",
+	"group",
+	"honey",
+	"kitchen",
+	"laid",
+	"limb",
+	"machine",
+	"mere",
+	"mold",
+	"murder",
+	"nerve",
+	"painful",
+	"poetry",
+	"prince",
+	"rabbit",
+	"shelter",
+	"shore",
+	"shower",
+	"soothe",
+	"stair",
+	"steady",
+	"sunlight",
+	"tangle",
+	"tease",
+	"treasure",
+	"uncle",
+	"begun",
+	"bliss",
+	"canvas",
+	"cheer",
+	"claw",
+	"clutch",
+	"commit",
+	"crimson",
+	"crystal",
+	"delight",
+	"doll",
+	"existence",
+	"express",
+	"fog",
+	"football",
+	"gay",
+	"goose",
+	"guard",
+	"hatred",
+	"illuminate",
+	"mass",
+	"math",
+	"mourn",
+	"rich",
+	"rough",
+	"skip",
+	"stir",
+	"student",
+	"style",
+	"support",
+	"thorn",
+	"tough",
+	"yard",
+	"yearn",
+	"yesterday",
+	"advice",
+	"appreciate",
+	"autumn",
+	"bank",
+	"beam",
+	"bowl",
+	"capture",
+	"carve",
+	"collapse",
+	"confusion",
+	"creation",
+	"dove",
+	"feather",
+	"girlfriend",
+	"glory",
+	"government",
+	"harsh",
+	"hop",
+	"inner",
+	"loser",
+	"moonlight",
+	"neighbor",
+	"neither",
+	"peach",
+	"pig",
+	"praise",
+	"screw",
+	"shield",
+	"shimmer",
+	"sneak",
+	"stab",
+	"subject",
+	"throughout",
+	"thrown",
+	"tower",
+	"twirl",
+	"wow",
+	"army",
+	"arrive",
+	"bathroom",
+	"bump",
+	"cease",
+	"cookie",
+	"couch",
+	"courage",
+	"dim",
+	"guilt",
+	"howl",
+	"hum",
+	"husband",
+	"insult",
+	"led",
+	"lunch",
+	"mock",
+	"mostly",
+	"natural",
+	"nearly",
+	"needle",
+	"nerd",
+	"peaceful",
+	"perfection",
+	"pile",
+	"price",
+	"remove",
+	"roam",
+	"sanctuary",
+	"serious",
+	"shiny",
+	"shook",
+	"sob",
+	"stolen",
+	"tap",
+	"vain",
+	"void",
+	"warrior",
+	"wrinkle",
+	"affection",
+	"apologize",
+	"blossom",
+	"bounce",
+	"bridge",
+	"cheap",
+	"crumble",
+	"decision",
+	"descend",
+	"desperately",
+	"dig",
+	"dot",
+	"flip",
+	"frighten",
+	"heartbeat",
+	"huge",
+	"lazy",
+	"lick",
+	"odd",
+	"opinion",
+	"process",
+	"puzzle",
+	"quietly",
+	"retreat",
+	"score",
+	"sentence",
+	"separate",
+	"situation",
+	"skill",
+	"soak",
+	"square",
+	"stray",
+	"taint",
+	"task",
+	"tide",
+	"underneath",
+	"veil",
+	"whistle",
+	"anywhere",
+	"bedroom",
+	"bid",
+	"bloody",
+	"burden",
+	"careful",
+	"compare",
+	"concern",
+	"curtain",
+	"decay",
+	"defeat",
+	"describe",
+	"double",
+	"dreamer",
+	"driver",
+	"dwell",
+	"evening",
+	"flare",
+	"flicker",
+	"grandma",
+	"guitar",
+	"harm",
+	"horrible",
+	"hungry",
+	"indeed",
+	"lace",
+	"melody",
+	"monkey",
+	"nation",
+	"object",
+	"obviously",
+	"rainbow",
+	"salt",
+	"scratch",
+	"shown",
+	"shy",
+	"stage",
+	"stun",
+	"third",
+	"tickle",
+	"useless",
+	"weakness",
+	"worship",
+	"worthless",
+	"afternoon",
+	"beard",
+	"boyfriend",
+	"bubble",
+	"busy",
+	"certain",
+	"chin",
+	"concrete",
+	"desk",
+	"diamond",
+	"doom",
+	"drawn",
+	"due",
+	"felicity",
+	"freeze",
+	"frost",
+	"garden",
+	"glide",
+	"harmony",
+	"hopefully",
+	"hunt",
+	"jealous",
+	"lightning",
+	"mama",
+	"mercy",
+	"peel",
+	"physical",
+	"position",
+	"pulse",
+	"punch",
+	"quit",
+	"rant",
+	"respond",
+	"salty",
+	"sane",
+	"satisfy",
+	"savior",
+	"sheep",
+	"slept",
+	"social",
+	"sport",
+	"tuck",
+	"utter",
+	"valley",
+	"wolf",
+	"aim",
+	"alas",
+	"alter",
+	"arrow",
+	"awaken",
+	"beaten",
+	"belief",
+	"brand",
+	"ceiling",
+	"cheese",
+	"clue",
+	"confidence",
+	"connection",
+	"daily",
+	"disguise",
+	"eager",
+	"erase",
+	"essence",
+	"everytime",
+	"expression",
+	"fan",
+	"flag",
+	"flirt",
+	"foul",
+	"fur",
+	"giggle",
+	"glorious",
+	"ignorance",
+	"law",
+	"lifeless",
+	"measure",
+	"mighty",
+	"muse",
+	"north",
+	"opposite",
+	"paradise",
+	"patience",
+	"patient",
+	"pencil",
+	"petal",
+	"plate",
+	"ponder",
+	"possibly",
+	"practice",
+	"slice",
+	"spell",
+	"stock",
+	"strife",
+	"strip",
+	"suffocate",
+	"suit",
+	"tender",
+	"tool",
+	"trade",
+	"velvet",
+	"verse",
+	"waist",
+	"witch",
+	"aunt",
+	"bench",
+	"bold",
+	"cap",
+	"certainly",
+	"click",
+	"companion",
+	"creator",
+	"dart",
+	"delicate",
+	"determine",
+	"dish",
+	"dragon",
+	"drama",
+	"drum",
+	"dude",
+	"everybody",
+	"feast",
+	"forehead",
+	"former",
+	"fright",
+	"fully",
+	"gas",
+	"hook",
+	"hurl",
+	"invite",
+	"juice",
+	"manage",
+	"moral",
+	"possess",
+	"raw",
+	"rebel",
+	"royal",
+	"scale",
+	"scary",
+	"several",
+	"slight",
+	"stubborn",
+	"swell",
+	"talent",
+	"tea",
+	"terrible",
+	"thread",
+	"torment",
+	"trickle",
+	"usually",
+	"vast",
+	"violence",
+	"weave",
+	"acid",
+	"agony",
+	"ashamed",
+	"awe",
+	"belly",
+	"blend",
+	"blush",
+	"character",
+	"cheat",
+	"common",
+	"company",
+	"coward",
+	"creak",
+	"danger",
+	"deadly",
+	"defense",
+	"define",
+	"depend",
+	"desperate",
+	"destination",
+	"dew",
+	"duck",
+	"dusty",
+	"embarrass",
+	"engine",
+	"example",
+	"explore",
+	"foe",
+	"freely",
+	"frustrate",
+	"generation",
+	"glove",
+	"guilty",
+	"health",
+	"hurry",
+	"idiot",
+	"impossible",
+	"inhale",
+	"jaw",
+	"kingdom",
+	"mention",
+	"mist",
+	"moan",
+	"mumble",
+	"mutter",
+	"observe",
+	"ode",
+	"pathetic",
+	"pattern",
+	"pie",
+	"prefer",
+	"puff",
+	"rape",
+	"rare",
+	"revenge",
+	"rude",
+	"scrape",
+	"spiral",
+	"squeeze",
+	"strain",
+	"sunset",
+	"suspend",
+	"sympathy",
+	"thigh",
+	"throne",
+	"total",
+	"unseen",
+	"weapon",
+	"weary",
+}
diff --git a/ethdb/.gitignore b/ethdb/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f725d58d14f7d1b6a8c41c45f78b4f38f529ae9e
--- /dev/null
+++ b/ethdb/.gitignore
@@ -0,0 +1,12 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile ~/.gitignore_global
+
+/tmp
+*/**/*un~
+*un~
+.DS_Store
+*/**/.DS_Store
+
diff --git a/ethdb/README.md b/ethdb/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5bed8eedc6c64288d96b29c86006cdb23295ac01
--- /dev/null
+++ b/ethdb/README.md
@@ -0,0 +1,11 @@
+# ethdb
+
+The ethdb package contains the ethereum database interfaces
+
+# Installation
+
+`go get github.com/ethereum/ethdb-go`
+
+# Usage
+
+Todo :-)
diff --git a/ethdb/database.go b/ethdb/database.go
new file mode 100644
index 0000000000000000000000000000000000000000..19aa83466e71aaa523f2725bd184edb1ce47db8c
--- /dev/null
+++ b/ethdb/database.go
@@ -0,0 +1,89 @@
+package ethdb
+
+import (
+	"fmt"
+	"path"
+
+	"github.com/ethereum/go-ethereum/compression/rle"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/syndtr/goleveldb/leveldb"
+	"github.com/syndtr/goleveldb/leveldb/iterator"
+)
+
+type LDBDatabase struct {
+	db   *leveldb.DB
+	comp bool
+}
+
+func NewLDBDatabase(name string) (*LDBDatabase, error) {
+	dbPath := path.Join(ethutil.Config.ExecPath, name)
+
+	// Open the db
+	db, err := leveldb.OpenFile(dbPath, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	database := &LDBDatabase{db: db, comp: true}
+
+	return database, nil
+}
+
+func (self *LDBDatabase) Put(key []byte, value []byte) {
+	if self.comp {
+		value = rle.Compress(value)
+	}
+
+	err := self.db.Put(key, value, nil)
+	if err != nil {
+		fmt.Println("Error put", err)
+	}
+}
+
+func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
+	dat, err := self.db.Get(key, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	if self.comp {
+		return rle.Decompress(dat)
+	}
+
+	return dat, nil
+}
+
+func (self *LDBDatabase) Delete(key []byte) error {
+	return self.db.Delete(key, nil)
+}
+
+func (self *LDBDatabase) LastKnownTD() []byte {
+	data, _ := self.Get([]byte("LTD"))
+
+	if len(data) == 0 {
+		data = []byte{0x0}
+	}
+
+	return data
+}
+
+func (self *LDBDatabase) NewIterator() iterator.Iterator {
+	return self.db.NewIterator(nil, nil)
+}
+
+func (self *LDBDatabase) Close() {
+	// Close the leveldb database
+	self.db.Close()
+}
+
+func (self *LDBDatabase) Print() {
+	iter := self.db.NewIterator(nil, nil)
+	for iter.Next() {
+		key := iter.Key()
+		value := iter.Value()
+
+		fmt.Printf("%x(%d): ", key, len(key))
+		node := ethutil.NewValueFromBytes(value)
+		fmt.Printf("%v\n", node)
+	}
+}
diff --git a/ethdb/database_test.go b/ethdb/database_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..2cbaf58e0dee90834a5884d30fec74401fa3920c
--- /dev/null
+++ b/ethdb/database_test.go
@@ -0,0 +1,28 @@
+package ethdb
+
+/*
+import (
+	"bytes"
+	"testing"
+)
+
+func TestCompression(t *testing.T) {
+	ethutil.ReadConfig("", "/tmp", "")
+
+	db, err := NewLDBDatabase("testdb")
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	in := make([]byte, 10)
+	db.Put([]byte("test1"), in)
+	out, err := db.Get([]byte("test1"))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if bytes.Compare(out, in) != 0 {
+		t.Error("put get", in, out)
+	}
+}
+*/
diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go
new file mode 100644
index 0000000000000000000000000000000000000000..48aa830e7719ac9e34a8e0dc6a6897252e45d5c6
--- /dev/null
+++ b/ethdb/memory_database.go
@@ -0,0 +1,67 @@
+package ethdb
+
+import (
+	"fmt"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+/*
+ * This is a test memory database. Do not use for any production it does not get persisted
+ */
+type MemDatabase struct {
+	db map[string][]byte
+}
+
+func NewMemDatabase() (*MemDatabase, error) {
+	db := &MemDatabase{db: make(map[string][]byte)}
+
+	return db, nil
+}
+
+func (db *MemDatabase) Put(key []byte, value []byte) {
+	db.db[string(key)] = value
+}
+
+func (db *MemDatabase) Set(key []byte, value []byte) {
+	db.Put(key, value)
+}
+
+func (db *MemDatabase) Get(key []byte) ([]byte, error) {
+	return db.db[string(key)], nil
+}
+
+/*
+func (db *MemDatabase) GetKeys() []*ethutil.Key {
+	data, _ := db.Get([]byte("KeyRing"))
+
+	return []*ethutil.Key{ethutil.NewKeyFromBytes(data)}
+}
+*/
+
+func (db *MemDatabase) Delete(key []byte) error {
+	delete(db.db, string(key))
+
+	return nil
+}
+
+func (db *MemDatabase) Print() {
+	for key, val := range db.db {
+		fmt.Printf("%x(%d): ", key, len(key))
+		node := ethutil.NewValueFromBytes(val)
+		fmt.Printf("%q\n", node.Interface())
+	}
+}
+
+func (db *MemDatabase) Close() {
+}
+
+func (db *MemDatabase) LastKnownTD() []byte {
+	data, _ := db.Get([]byte("LastKnownTotalDifficulty"))
+
+	if len(data) == 0 || data == nil {
+		data = []byte{0x0}
+	}
+
+	return data
+}
diff --git a/ethereum.go b/ethereum.go
new file mode 100644
index 0000000000000000000000000000000000000000..5d74e28e9040f26547160ee28befec338f1d7225
--- /dev/null
+++ b/ethereum.go
@@ -0,0 +1,659 @@
+package eth
+
+import (
+	"container/list"
+	"encoding/json"
+	"fmt"
+	"math/big"
+	"math/rand"
+	"net"
+	"path"
+	"strconv"
+	"strings"
+	"sync"
+	"sync/atomic"
+	"time"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/rpc"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+const (
+	seedTextFileUri string = "http://www.ethereum.org/servers.poc3.txt"
+	seedNodeAddress        = "poc-7.ethdev.com:30303"
+)
+
+var loggerger = logger.NewLogger("SERV")
+
+func eachPeer(peers *list.List, callback func(*Peer, *list.Element)) {
+	// Loop thru the peers and close them (if we had them)
+	for e := peers.Front(); e != nil; e = e.Next() {
+		callback(e.Value.(*Peer), e)
+	}
+}
+
+const (
+	processReapingTimeout = 60 // TODO increase
+)
+
+type Ethereum struct {
+	// Channel for shutting down the ethereum
+	shutdownChan chan bool
+	quit         chan bool
+
+	// DB interface
+	db ethutil.Database
+	// State manager for processing new blocks and managing the over all states
+	blockManager *core.BlockManager
+	// The transaction pool. Transaction can be pushed on this pool
+	// for later including in the blocks
+	txPool *core.TxPool
+	// The canonical chain
+	blockChain *core.ChainManager
+	// The block pool
+	blockPool *BlockPool
+	// Eventer
+	eventMux event.TypeMux
+	// Peers
+	peers *list.List
+	// Nonce
+	Nonce uint64
+
+	Addr net.Addr
+	Port string
+
+	blacklist [][]byte
+
+	peerMut sync.Mutex
+
+	// Capabilities for outgoing peers
+	serverCaps Caps
+
+	nat NAT
+
+	// Specifies the desired amount of maximum peers
+	MaxPeers int
+
+	Mining bool
+
+	listening bool
+
+	RpcServer *rpc.JsonRpcServer
+
+	keyManager *crypto.KeyManager
+
+	clientIdentity wire.ClientIdentity
+
+	isUpToDate bool
+
+	filterMu sync.RWMutex
+	filterId int
+	filters  map[int]*core.Filter
+}
+
+func New(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *crypto.KeyManager, caps Caps, usePnp bool) (*Ethereum, error) {
+	var err error
+	var nat NAT
+
+	if usePnp {
+		nat, err = Discover()
+		if err != nil {
+			loggerger.Debugln("UPnP failed", err)
+		}
+	}
+
+	bootstrapDb(db)
+
+	ethutil.Config.Db = db
+
+	nonce, _ := ethutil.RandomUint64()
+	ethereum := &Ethereum{
+		shutdownChan:   make(chan bool),
+		quit:           make(chan bool),
+		db:             db,
+		peers:          list.New(),
+		Nonce:          nonce,
+		serverCaps:     caps,
+		nat:            nat,
+		keyManager:     keyManager,
+		clientIdentity: clientIdentity,
+		isUpToDate:     true,
+		filters:        make(map[int]*core.Filter),
+	}
+
+	ethereum.blockPool = NewBlockPool(ethereum)
+	ethereum.blockChain = core.NewChainManager(ethereum.EventMux())
+	ethereum.txPool = core.NewTxPool(ethereum.blockChain, ethereum, ethereum.EventMux())
+	ethereum.blockManager = core.NewBlockManager(ethereum.txPool, ethereum.blockChain, ethereum.EventMux())
+	ethereum.blockChain.SetProcessor(ethereum.blockManager)
+
+	// Start the tx pool
+	ethereum.txPool.Start()
+
+	return ethereum, nil
+}
+
+func (s *Ethereum) KeyManager() *crypto.KeyManager {
+	return s.keyManager
+}
+
+func (s *Ethereum) ClientIdentity() wire.ClientIdentity {
+	return s.clientIdentity
+}
+
+func (s *Ethereum) ChainManager() *core.ChainManager {
+	return s.blockChain
+}
+
+func (s *Ethereum) BlockManager() *core.BlockManager {
+	return s.blockManager
+}
+
+func (s *Ethereum) TxPool() *core.TxPool {
+	return s.txPool
+}
+func (s *Ethereum) BlockPool() *BlockPool {
+	return s.blockPool
+}
+func (s *Ethereum) EventMux() *event.TypeMux {
+	return &s.eventMux
+}
+func (self *Ethereum) Db() ethutil.Database {
+	return self.db
+}
+
+func (s *Ethereum) ServerCaps() Caps {
+	return s.serverCaps
+}
+func (s *Ethereum) IsMining() bool {
+	return s.Mining
+}
+func (s *Ethereum) PeerCount() int {
+	return s.peers.Len()
+}
+func (s *Ethereum) IsUpToDate() bool {
+	upToDate := true
+	eachPeer(s.peers, func(peer *Peer, e *list.Element) {
+		if atomic.LoadInt32(&peer.connected) == 1 {
+			if peer.catchingUp == true && peer.versionKnown {
+				upToDate = false
+			}
+		}
+	})
+	return upToDate
+}
+func (s *Ethereum) PushPeer(peer *Peer) {
+	s.peers.PushBack(peer)
+}
+func (s *Ethereum) IsListening() bool {
+	return s.listening
+}
+
+func (s *Ethereum) HighestTDPeer() (td *big.Int) {
+	td = big.NewInt(0)
+
+	eachPeer(s.peers, func(p *Peer, v *list.Element) {
+		if p.td.Cmp(td) > 0 {
+			td = p.td
+		}
+	})
+
+	return
+}
+
+func (self *Ethereum) BlacklistPeer(peer *Peer) {
+	self.blacklist = append(self.blacklist, peer.pubkey)
+}
+
+func (s *Ethereum) AddPeer(conn net.Conn) {
+	peer := NewPeer(conn, s, true)
+
+	if peer != nil {
+		if s.peers.Len() < s.MaxPeers {
+			peer.Start()
+		} else {
+			loggerger.Debugf("Max connected peers reached. Not adding incoming peer.")
+		}
+	}
+}
+
+func (s *Ethereum) ProcessPeerList(addrs []string) {
+	for _, addr := range addrs {
+		// TODO Probably requires some sanity checks
+		s.ConnectToPeer(addr)
+	}
+}
+
+func (s *Ethereum) ConnectToPeer(addr string) error {
+	if s.peers.Len() < s.MaxPeers {
+		var alreadyConnected bool
+
+		ahost, aport, _ := net.SplitHostPort(addr)
+		var chost string
+
+		ips, err := net.LookupIP(ahost)
+
+		if err != nil {
+			return err
+		} else {
+			// If more then one ip is available try stripping away the ipv6 ones
+			if len(ips) > 1 {
+				var ipsv4 []net.IP
+				// For now remove the ipv6 addresses
+				for _, ip := range ips {
+					if strings.Contains(ip.String(), "::") {
+						continue
+					} else {
+						ipsv4 = append(ipsv4, ip)
+					}
+				}
+				if len(ipsv4) == 0 {
+					return fmt.Errorf("[SERV] No IPV4 addresses available for hostname")
+				}
+
+				// Pick a random ipv4 address, simulating round-robin DNS.
+				rand.Seed(time.Now().UTC().UnixNano())
+				i := rand.Intn(len(ipsv4))
+				chost = ipsv4[i].String()
+			} else {
+				if len(ips) == 0 {
+					return fmt.Errorf("[SERV] No IPs resolved for the given hostname")
+					return nil
+				}
+				chost = ips[0].String()
+			}
+		}
+
+		eachPeer(s.peers, func(p *Peer, v *list.Element) {
+			if p.conn == nil {
+				return
+			}
+			phost, pport, _ := net.SplitHostPort(p.conn.RemoteAddr().String())
+
+			if phost == chost && pport == aport {
+				alreadyConnected = true
+				//loggerger.Debugf("Peer %s already added.\n", chost)
+				return
+			}
+		})
+
+		if alreadyConnected {
+			return nil
+		}
+
+		NewOutboundPeer(addr, s, s.serverCaps)
+	}
+
+	return nil
+}
+
+func (s *Ethereum) OutboundPeers() []*Peer {
+	// Create a new peer slice with at least the length of the total peers
+	outboundPeers := make([]*Peer, s.peers.Len())
+	length := 0
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		if !p.inbound && p.conn != nil {
+			outboundPeers[length] = p
+			length++
+		}
+	})
+
+	return outboundPeers[:length]
+}
+
+func (s *Ethereum) InboundPeers() []*Peer {
+	// Create a new peer slice with at least the length of the total peers
+	inboundPeers := make([]*Peer, s.peers.Len())
+	length := 0
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		if p.inbound {
+			inboundPeers[length] = p
+			length++
+		}
+	})
+
+	return inboundPeers[:length]
+}
+
+func (s *Ethereum) InOutPeers() []*Peer {
+	// Reap the dead peers first
+	s.reapPeers()
+
+	// Create a new peer slice with at least the length of the total peers
+	inboundPeers := make([]*Peer, s.peers.Len())
+	length := 0
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		// Only return peers with an actual ip
+		if len(p.host) > 0 {
+			inboundPeers[length] = p
+			length++
+		}
+	})
+
+	return inboundPeers[:length]
+}
+
+func (s *Ethereum) Broadcast(msgType wire.MsgType, data []interface{}) {
+	msg := wire.NewMessage(msgType, data)
+	s.BroadcastMsg(msg)
+}
+
+func (s *Ethereum) BroadcastMsg(msg *wire.Msg) {
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		p.QueueMessage(msg)
+	})
+}
+
+func (s *Ethereum) Peers() *list.List {
+	return s.peers
+}
+
+func (s *Ethereum) reapPeers() {
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) {
+			s.removePeerElement(e)
+		}
+	})
+}
+
+func (s *Ethereum) removePeerElement(e *list.Element) {
+	s.peerMut.Lock()
+	defer s.peerMut.Unlock()
+
+	s.peers.Remove(e)
+
+	s.eventMux.Post(PeerListEvent{s.peers})
+}
+
+func (s *Ethereum) RemovePeer(p *Peer) {
+	eachPeer(s.peers, func(peer *Peer, e *list.Element) {
+		if peer == p {
+			s.removePeerElement(e)
+		}
+	})
+}
+
+func (s *Ethereum) reapDeadPeerHandler() {
+	reapTimer := time.NewTicker(processReapingTimeout * time.Second)
+
+	for {
+		select {
+		case <-reapTimer.C:
+			s.reapPeers()
+		}
+	}
+}
+
+// Start the ethereum
+func (s *Ethereum) Start(seed bool) {
+	s.blockPool.Start()
+
+	// Bind to addr and port
+	ln, err := net.Listen("tcp", ":"+s.Port)
+	if err != nil {
+		loggerger.Warnf("Port %s in use. Connection listening disabled. Acting as client", s.Port)
+		s.listening = false
+	} else {
+		s.listening = true
+		// Starting accepting connections
+		loggerger.Infoln("Ready and accepting connections")
+		// Start the peer handler
+		go s.peerHandler(ln)
+	}
+
+	if s.nat != nil {
+		go s.upnpUpdateThread()
+	}
+
+	// Start the reaping processes
+	go s.reapDeadPeerHandler()
+	go s.update()
+	go s.filterLoop()
+
+	if seed {
+		s.Seed()
+	}
+	s.ConnectToPeer("localhost:40404")
+	loggerger.Infoln("Server started")
+}
+
+func (s *Ethereum) Seed() {
+	// Sorry Py person. I must blacklist. you perform badly
+	s.blacklist = append(s.blacklist, ethutil.Hex2Bytes("64656330303561383532336435376331616537643864663236623336313863373537353163636634333530626263396330346237336262623931383064393031"))
+	ips := PastPeers()
+	if len(ips) > 0 {
+		for _, ip := range ips {
+			loggerger.Infoln("Connecting to previous peer ", ip)
+			s.ConnectToPeer(ip)
+		}
+	} else {
+		loggerger.Debugln("Retrieving seed nodes")
+
+		// Eth-Go Bootstrapping
+		ips, er := net.LookupIP("seed.bysh.me")
+		if er == nil {
+			peers := []string{}
+			for _, ip := range ips {
+				node := fmt.Sprintf("%s:%d", ip.String(), 30303)
+				loggerger.Debugln("Found DNS Go Peer:", node)
+				peers = append(peers, node)
+			}
+			s.ProcessPeerList(peers)
+		}
+
+		// Official DNS Bootstrapping
+		_, nodes, err := net.LookupSRV("eth", "tcp", "ethereum.org")
+		if err == nil {
+			peers := []string{}
+			// Iterate SRV nodes
+			for _, n := range nodes {
+				target := n.Target
+				port := strconv.Itoa(int(n.Port))
+				// Resolve target to ip (Go returns list, so may resolve to multiple ips?)
+				addr, err := net.LookupHost(target)
+				if err == nil {
+					for _, a := range addr {
+						// Build string out of SRV port and Resolved IP
+						peer := net.JoinHostPort(a, port)
+						loggerger.Debugln("Found DNS Bootstrap Peer:", peer)
+						peers = append(peers, peer)
+					}
+				} else {
+					loggerger.Debugln("Couldn't resolve :", target)
+				}
+			}
+			// Connect to Peer list
+			s.ProcessPeerList(peers)
+		}
+
+		s.ConnectToPeer(seedNodeAddress)
+	}
+}
+
+func (s *Ethereum) peerHandler(listener net.Listener) {
+	for {
+		conn, err := listener.Accept()
+		if err != nil {
+			loggerger.Debugln(err)
+
+			continue
+		}
+
+		go s.AddPeer(conn)
+	}
+}
+
+func (s *Ethereum) Stop() {
+	// Stop eventMux first, it will close all subscriptions.
+	s.eventMux.Stop()
+
+	// Close the database
+	defer s.db.Close()
+
+	var ips []string
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		ips = append(ips, p.conn.RemoteAddr().String())
+	})
+
+	if len(ips) > 0 {
+		d, _ := json.MarshalIndent(ips, "", "    ")
+		ethutil.WriteFile(path.Join(ethutil.Config.ExecPath, "known_peers.json"), d)
+	}
+
+	eachPeer(s.peers, func(p *Peer, e *list.Element) {
+		p.Stop()
+	})
+
+	close(s.quit)
+
+	if s.RpcServer != nil {
+		s.RpcServer.Stop()
+	}
+	s.txPool.Stop()
+	s.blockPool.Stop()
+
+	loggerger.Infoln("Server stopped")
+	close(s.shutdownChan)
+}
+
+// This function will wait for a shutdown and resumes main thread execution
+func (s *Ethereum) WaitForShutdown() {
+	<-s.shutdownChan
+}
+
+func (s *Ethereum) upnpUpdateThread() {
+	// Go off immediately to prevent code duplication, thereafter we renew
+	// lease every 15 minutes.
+	timer := time.NewTimer(5 * time.Minute)
+	lport, _ := strconv.ParseInt(s.Port, 10, 16)
+	first := true
+out:
+	for {
+		select {
+		case <-timer.C:
+			var err error
+			_, err = s.nat.AddPortMapping("TCP", int(lport), int(lport), "eth listen port", 20*60)
+			if err != nil {
+				loggerger.Debugln("can't add UPnP port mapping:", err)
+				break out
+			}
+			if first && err == nil {
+				_, err = s.nat.GetExternalAddress()
+				if err != nil {
+					loggerger.Debugln("UPnP can't get external address:", err)
+					continue out
+				}
+				first = false
+			}
+			timer.Reset(time.Minute * 15)
+		case <-s.quit:
+			break out
+		}
+	}
+
+	timer.Stop()
+
+	if err := s.nat.DeletePortMapping("TCP", int(lport), int(lport)); err != nil {
+		loggerger.Debugln("unable to remove UPnP port mapping:", err)
+	} else {
+		loggerger.Debugln("succesfully disestablished UPnP port mapping")
+	}
+}
+
+func (self *Ethereum) update() {
+	upToDateTimer := time.NewTicker(1 * time.Second)
+
+out:
+	for {
+		select {
+		case <-upToDateTimer.C:
+			if self.IsUpToDate() && !self.isUpToDate {
+				self.eventMux.Post(ChainSyncEvent{false})
+				self.isUpToDate = true
+			} else if !self.IsUpToDate() && self.isUpToDate {
+				self.eventMux.Post(ChainSyncEvent{true})
+				self.isUpToDate = false
+			}
+		case <-self.quit:
+			break out
+		}
+	}
+}
+
+// InstallFilter adds filter for blockchain events.
+// The filter's callbacks will run for matching blocks and messages.
+// The filter should not be modified after it has been installed.
+func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) {
+	self.filterMu.Lock()
+	id = self.filterId
+	self.filters[id] = filter
+	self.filterId++
+	self.filterMu.Unlock()
+	return id
+}
+
+func (self *Ethereum) UninstallFilter(id int) {
+	self.filterMu.Lock()
+	delete(self.filters, id)
+	self.filterMu.Unlock()
+}
+
+// GetFilter retrieves a filter installed using InstallFilter.
+// The filter may not be modified.
+func (self *Ethereum) GetFilter(id int) *core.Filter {
+	self.filterMu.RLock()
+	defer self.filterMu.RUnlock()
+	return self.filters[id]
+}
+
+func (self *Ethereum) filterLoop() {
+	// Subscribe to events
+	events := self.eventMux.Subscribe(core.NewBlockEvent{}, state.Messages(nil))
+	for event := range events.Chan() {
+		switch event := event.(type) {
+		case core.NewBlockEvent:
+			self.filterMu.RLock()
+			for _, filter := range self.filters {
+				if filter.BlockCallback != nil {
+					filter.BlockCallback(event.Block)
+				}
+			}
+			self.filterMu.RUnlock()
+
+		case state.Messages:
+			self.filterMu.RLock()
+			for _, filter := range self.filters {
+				if filter.MessageCallback != nil {
+					msgs := filter.FilterMessages(event)
+					if len(msgs) > 0 {
+						filter.MessageCallback(msgs)
+					}
+				}
+			}
+			self.filterMu.RUnlock()
+		}
+	}
+}
+
+func bootstrapDb(db ethutil.Database) {
+	d, _ := db.Get([]byte("ProtocolVersion"))
+	protov := ethutil.NewValue(d).Uint()
+
+	if protov == 0 {
+		db.Put([]byte("ProtocolVersion"), ethutil.NewValue(ProtocolVersion).Bytes())
+	}
+}
+
+func PastPeers() []string {
+	var ips []string
+	data, _ := ethutil.ReadAllFile(path.Join(ethutil.Config.ExecPath, "known_peers.json"))
+	json.Unmarshal([]byte(data), &ips)
+
+	return ips
+}
diff --git a/ethereum/cmd.go b/ethereum/cmd.go
deleted file mode 100644
index 5ddc9161901cd684864ecb029d29edf1d75f70af..0000000000000000000000000000000000000000
--- a/ethereum/cmd.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package main
-
-import (
-	"io/ioutil"
-	"os"
-
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/go-ethereum/ethereum/repl"
-	"github.com/ethereum/go-ethereum/javascript"
-	"github.com/ethereum/go-ethereum/utils"
-)
-
-func InitJsConsole(ethereum *eth.Ethereum) {
-	repl := ethrepl.NewJSRepl(ethereum)
-	go repl.Start()
-	utils.RegisterInterrupt(func(os.Signal) {
-		repl.Stop()
-	})
-}
-
-func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
-	file, err := os.Open(InputFile)
-	if err != nil {
-		logger.Fatalln(err)
-	}
-	content, err := ioutil.ReadAll(file)
-	if err != nil {
-		logger.Fatalln(err)
-	}
-	re := javascript.NewJSRE(ethereum)
-	utils.RegisterInterrupt(func(os.Signal) {
-		re.Stop()
-	})
-	re.Run(string(content))
-}
diff --git a/ethereum/repl/repl_windows.go b/ethereum/repl/repl_windows.go
deleted file mode 100644
index 4106c89bc3035f1b30094de77d8beb74c81465bc..0000000000000000000000000000000000000000
--- a/ethereum/repl/repl_windows.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package ethrepl
-
-import (
-	"bufio"
-	"fmt"
-	"os"
-)
-
-func (self *JSRepl) read() {
-	reader := bufio.NewReader(os.Stdin)
-	for {
-		fmt.Printf(self.prompt)
-		str, _, err := reader.ReadLine()
-		if err != nil {
-			fmt.Println("Error reading input", err)
-		} else {
-			self.parseInput(string(str))
-		}
-	}
-}
-
-func (self *JSRepl) PrintValue(value otto.Value) {
-	fmt.Println(value)
-}
diff --git a/ethutil/.gitignore b/ethutil/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f725d58d14f7d1b6a8c41c45f78b4f38f529ae9e
--- /dev/null
+++ b/ethutil/.gitignore
@@ -0,0 +1,12 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile ~/.gitignore_global
+
+/tmp
+*/**/*un~
+*un~
+.DS_Store
+*/**/.DS_Store
+
diff --git a/ethutil/.travis.yml b/ethutil/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..69359072d9650ed325c87fe76d18c4a6c62a352c
--- /dev/null
+++ b/ethutil/.travis.yml
@@ -0,0 +1,3 @@
+language: go
+go:
+  - 1.2
diff --git a/ethutil/README.md b/ethutil/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ed56b71ba16d0f93ac1de2d7ea5bc22cae516d5
--- /dev/null
+++ b/ethutil/README.md
@@ -0,0 +1,139 @@
+# ethutil
+
+[](https://travis-ci.org/ethereum/go-ethereum)
+
+The ethutil package contains the ethereum utility library.
+
+# Installation
+
+`go get github.com/ethereum/ethutil-go`
+
+# Usage
+
+## RLP (Recursive Linear Prefix) Encoding
+
+RLP Encoding is an encoding scheme utilized by the Ethereum project. It
+encodes any native value or list to string.
+
+More in depth information about the Encoding scheme see the [Wiki](http://wiki.ethereum.org/index.php/RLP)
+article.
+
+```go
+rlp := ethutil.Encode("doge")
+fmt.Printf("%q\n", rlp) // => "\0x83dog"
+
+rlp = ethutil.Encode([]interface{}{"dog", "cat"})
+fmt.Printf("%q\n", rlp) // => "\0xc8\0x83dog\0x83cat"
+decoded := ethutil.Decode(rlp)
+fmt.Println(decoded) // => ["dog" "cat"]
+```
+
+## Patricia Trie
+
+Patricie Tree is a merkle trie utilized by the Ethereum project.
+
+More in depth information about the (modified) Patricia Trie can be
+found on the [Wiki](http://wiki.ethereum.org/index.php/Patricia_Tree).
+
+The patricia trie uses a db as backend and could be anything as long as
+it satisfies the Database interface found in `ethutil/db.go`.
+
+```go
+db := NewDatabase()
+
+// db, root
+trie := ethutil.NewTrie(db, "")
+
+trie.Put("puppy", "dog")
+trie.Put("horse", "stallion")
+trie.Put("do", "verb")
+trie.Put("doge", "coin")
+
+// Look up the key "do" in the trie
+out := trie.Get("do")
+fmt.Println(out) // => verb
+
+trie.Delete("puppy")
+```
+
+The patricia trie, in combination with RLP, provides a robust,
+cryptographically authenticated data structure that can be used to store
+all (key, value) bindings.
+
+```go
+// ... Create db/trie
+
+// Note that RLP uses interface slices as list
+value := ethutil.Encode([]interface{}{"one", 2, "three", []interface{}{42}})
+// Store the RLP encoded value of the list
+trie.Put("mykey", value)
+```
+
+## Value
+
+Value is a Generic Value which is used in combination with RLP data or
+`([])interface{}` structures. It may serve as a bridge between RLP data
+and actual real values and takes care of all the type checking and
+casting. Unlike Go's `reflect.Value` it does not panic if it's unable to
+cast to the requested value. It simple returns the base value of that
+type (e.g. `Slice()` returns []interface{}, `Uint()` return 0, etc).
+
+### Creating a new Value
+
+`NewEmptyValue()` returns a new \*Value with it's initial value set to a
+`[]interface{}`
+
+`AppendList()` appends a list to the current value.
+
+`Append(v)` appends the value (v) to the current value/list.
+
+```go
+val := ethutil.NewEmptyValue().Append(1).Append("2")
+val.AppendList().Append(3)
+```
+
+### Retrieving values
+
+`Get(i)` returns the `i` item in the list.
+
+`Uint()` returns the value as an unsigned int64.
+
+`Slice()` returns the value as a interface slice.
+
+`Str()` returns the value as a string.
+
+`Bytes()` returns the value as a byte slice.
+
+`Len()` assumes current to be a slice and returns its length.
+
+`Byte()` returns the value as a single byte.
+
+```go
+val := ethutil.NewValue([]interface{}{1,"2",[]interface{}{3}})
+val.Get(0).Uint() // => 1
+val.Get(1).Str()  // => "2"
+s := val.Get(2)   // => Value([]interface{}{3})
+s.Get(0).Uint()   // => 3
+```
+
+## Decoding
+
+Decoding streams of RLP data is simplified
+
+```go
+val := ethutil.NewValueFromBytes(rlpData)
+val.Get(0).Uint()
+```
+
+## Encoding
+
+Encoding from Value to RLP is done with the `Encode` method. The
+underlying value can be anything RLP can encode (int, str, lists, bytes)
+
+```go
+val := ethutil.NewValue([]interface{}{1,"2",[]interface{}{3}})
+rlp := val.Encode()
+// Store the rlp data
+Store(rlp)
+```
diff --git a/ethutil/big.go b/ethutil/big.go
new file mode 100644
index 0000000000000000000000000000000000000000..2ff1c72d811424723e1cc47e00fd0e652633322f
--- /dev/null
+++ b/ethutil/big.go
@@ -0,0 +1,116 @@
+package ethutil
+
+import "math/big"
+
+// Big pow
+//
+// Returns the power of two big integers
+func BigPow(a, b int) *big.Int {
+	c := new(big.Int)
+	c.Exp(big.NewInt(int64(a)), big.NewInt(int64(b)), big.NewInt(0))
+
+	return c
+}
+
+// Big
+//
+// Shortcut for new(big.Int).SetString(..., 0)
+func Big(num string) *big.Int {
+	n := new(big.Int)
+	n.SetString(num, 0)
+
+	return n
+}
+
+// BigD
+//
+// Shortcut for new(big.Int).SetBytes(...)
+func BigD(data []byte) *big.Int {
+	n := new(big.Int)
+	n.SetBytes(data)
+
+	return n
+}
+
+func BitTest(num *big.Int, i int) bool {
+	return num.Bit(i) > 0
+}
+
+// To256
+//
+// "cast" the big int to a 256 big int (i.e., limit to)
+var tt256 = new(big.Int).Lsh(big.NewInt(1), 256)
+var tt256m1 = new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1))
+var tt255 = new(big.Int).Lsh(big.NewInt(1), 255)
+
+func U256(x *big.Int) *big.Int {
+	//if x.Cmp(Big0) < 0 {
+	//		return new(big.Int).Add(tt256, x)
+	//	}
+
+	x.And(x, tt256m1)
+
+	return x
+}
+
+func S256(x *big.Int) *big.Int {
+	if x.Cmp(tt255) < 0 {
+		return x
+	} else {
+		// We don't want to modify x, ever
+		return new(big.Int).Sub(x, tt256)
+	}
+}
+
+func FirstBitSet(v *big.Int) int {
+	for i := 0; i < v.BitLen(); i++ {
+		if v.Bit(i) > 0 {
+			return i
+		}
+	}
+
+	return v.BitLen()
+}
+
+// Big to bytes
+//
+// Returns the bytes of a big integer with the size specified by **base**
+// Attempts to pad the byte array with zeros.
+func BigToBytes(num *big.Int, base int) []byte {
+	ret := make([]byte, base/8)
+
+	if len(num.Bytes()) > base/8 {
+		return num.Bytes()
+	}
+
+	return append(ret[:len(ret)-len(num.Bytes())], num.Bytes()...)
+}
+
+// Big copy
+//
+// Creates a copy of the given big integer
+func BigCopy(src *big.Int) *big.Int {
+	return new(big.Int).Set(src)
+}
+
+// Big max
+//
+// Returns the maximum size big integer
+func BigMax(x, y *big.Int) *big.Int {
+	if x.Cmp(y) <= 0 {
+		return y
+	}
+
+	return x
+}
+
+// Big min
+//
+// Returns the minimum size big integer
+func BigMin(x, y *big.Int) *big.Int {
+	if x.Cmp(y) >= 0 {
+		return y
+	}
+
+	return x
+}
diff --git a/ethutil/big_test.go b/ethutil/big_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..bf3c96c6d46e8584a8d7d5c81df9b6e34d3fafe9
--- /dev/null
+++ b/ethutil/big_test.go
@@ -0,0 +1,73 @@
+package ethutil
+
+import (
+	"bytes"
+	"testing"
+)
+
+func TestMisc(t *testing.T) {
+	a := Big("10")
+	b := Big("57896044618658097711785492504343953926634992332820282019728792003956564819968")
+	c := []byte{1, 2, 3, 4}
+	z := BitTest(a, 1)
+
+	if z != true {
+		t.Error("Expected true got", z)
+	}
+
+	U256(a)
+	S256(a)
+
+	U256(b)
+	S256(b)
+
+	BigD(c)
+}
+
+func TestBigMax(t *testing.T) {
+	a := Big("10")
+	b := Big("5")
+
+	max1 := BigMax(a, b)
+	if max1 != a {
+		t.Errorf("Expected %d got %d", a, max1)
+	}
+
+	max2 := BigMax(b, a)
+	if max2 != a {
+		t.Errorf("Expected %d got %d", a, max2)
+	}
+}
+
+func TestBigMin(t *testing.T) {
+	a := Big("10")
+	b := Big("5")
+
+	min1 := BigMin(a, b)
+	if min1 != b {
+		t.Errorf("Expected %d got %d", b, min1)
+	}
+
+	min2 := BigMin(b, a)
+	if min2 != b {
+		t.Errorf("Expected %d got %d", b, min2)
+	}
+}
+
+func TestBigCopy(t *testing.T) {
+	a := Big("10")
+	b := BigCopy(a)
+	c := Big("1000000000000")
+	y := BigToBytes(b, 16)
+	ybytes := []byte{0, 10}
+	z := BigToBytes(c, 16)
+	zbytes := []byte{232, 212, 165, 16, 0}
+
+	if bytes.Compare(y, ybytes) != 0 {
+		t.Error("Got", ybytes)
+	}
+
+	if bytes.Compare(z, zbytes) != 0 {
+		t.Error("Got", zbytes)
+	}
+}
diff --git a/ethutil/bytes.go b/ethutil/bytes.go
new file mode 100644
index 0000000000000000000000000000000000000000..bd294f28a7ac6b6a1cfaa67c0e364666011cd054
--- /dev/null
+++ b/ethutil/bytes.go
@@ -0,0 +1,234 @@
+package ethutil
+
+import (
+	"bytes"
+	"encoding/binary"
+	"encoding/hex"
+	"fmt"
+	"math/big"
+	"strings"
+)
+
+type Bytes []byte
+
+func (self Bytes) String() string {
+	return string(self)
+}
+
+func DeleteFromByteSlice(s [][]byte, hash []byte) [][]byte {
+	for i, h := range s {
+		if bytes.Compare(h, hash) == 0 {
+			return append(s[:i:i], s[i+1:]...)
+		}
+	}
+
+	return s
+}
+
+// Number to bytes
+//
+// Returns the number in bytes with the specified base
+func NumberToBytes(num interface{}, bits int) []byte {
+	buf := new(bytes.Buffer)
+	err := binary.Write(buf, binary.BigEndian, num)
+	if err != nil {
+		fmt.Println("NumberToBytes failed:", err)
+	}
+
+	return buf.Bytes()[buf.Len()-(bits/8):]
+}
+
+// Bytes to number
+//
+// Attempts to cast a byte slice to a unsigned integer
+func BytesToNumber(b []byte) uint64 {
+	var number uint64
+
+	// Make sure the buffer is 64bits
+	data := make([]byte, 8)
+	data = append(data[:len(b)], b...)
+
+	buf := bytes.NewReader(data)
+	err := binary.Read(buf, binary.BigEndian, &number)
+	if err != nil {
+		fmt.Println("BytesToNumber failed:", err)
+	}
+
+	return number
+}
+
+// Read variable int
+//
+// Read a variable length number in big endian byte order
+func ReadVarInt(buff []byte) (ret uint64) {
+	switch l := len(buff); {
+	case l > 4:
+		d := LeftPadBytes(buff, 8)
+		binary.Read(bytes.NewReader(d), binary.BigEndian, &ret)
+	case l > 2:
+		var num uint32
+		d := LeftPadBytes(buff, 4)
+		binary.Read(bytes.NewReader(d), binary.BigEndian, &num)
+		ret = uint64(num)
+	case l > 1:
+		var num uint16
+		d := LeftPadBytes(buff, 2)
+		binary.Read(bytes.NewReader(d), binary.BigEndian, &num)
+		ret = uint64(num)
+	default:
+		var num uint8
+		binary.Read(bytes.NewReader(buff), binary.BigEndian, &num)
+		ret = uint64(num)
+	}
+
+	return
+}
+
+// Binary length
+//
+// Returns the true binary length of the given number
+func BinaryLength(num int) int {
+	if num == 0 {
+		return 0
+	}
+
+	return 1 + BinaryLength(num>>8)
+}
+
+// Copy bytes
+//
+// Returns an exact copy of the provided bytes
+func CopyBytes(b []byte) (copiedBytes []byte) {
+	copiedBytes = make([]byte, len(b))
+	copy(copiedBytes, b)
+
+	return
+}
+
+func IsHex(str string) bool {
+	l := len(str)
+	return l >= 4 && l%2 == 0 && str[0:2] == "0x"
+}
+
+func Bytes2Hex(d []byte) string {
+	return hex.EncodeToString(d)
+}
+
+func Hex2Bytes(str string) []byte {
+	h, _ := hex.DecodeString(str)
+
+	return h
+}
+
+func StringToByteFunc(str string, cb func(str string) []byte) (ret []byte) {
+	if len(str) > 1 && str[0:2] == "0x" && !strings.Contains(str, "\n") {
+		ret = Hex2Bytes(str[2:])
+	} else {
+		ret = cb(str)
+	}
+
+	return
+}
+
+func FormatData(data string) []byte {
+	if len(data) == 0 {
+		return nil
+	}
+	// Simple stupid
+	d := new(big.Int)
+	if data[0:1] == "\"" && data[len(data)-1:] == "\"" {
+		return RightPadBytes([]byte(data[1:len(data)-1]), 32)
+	} else if len(data) > 1 && data[:2] == "0x" {
+		d.SetBytes(Hex2Bytes(data[2:]))
+	} else {
+		d.SetString(data, 0)
+	}
+
+	return BigToBytes(d, 256)
+}
+
+func ParseData(data ...interface{}) (ret []byte) {
+	for _, item := range data {
+		switch t := item.(type) {
+		case string:
+			var str []byte
+			if IsHex(t) {
+				str = Hex2Bytes(t[2:])
+			} else {
+				str = []byte(t)
+			}
+
+			ret = append(ret, RightPadBytes(str, 32)...)
+		case []byte:
+			ret = append(ret, LeftPadBytes(t, 32)...)
+		}
+	}
+
+	return
+}
+
+func RightPadBytes(slice []byte, l int) []byte {
+	if l < len(slice) {
+		return slice
+	}
+
+	padded := make([]byte, l)
+	copy(padded[0:len(slice)], slice)
+
+	return padded
+}
+
+func LeftPadBytes(slice []byte, l int) []byte {
+	if l < len(slice) {
+		return slice
+	}
+
+	padded := make([]byte, l)
+	copy(padded[l-len(slice):], slice)
+
+	return padded
+}
+
+func LeftPadString(str string, l int) string {
+	if l < len(str) {
+		return str
+	}
+
+	zeros := Bytes2Hex(make([]byte, (l-len(str))/2))
+
+	return zeros + str
+
+}
+
+func RightPadString(str string, l int) string {
+	if l < len(str) {
+		return str
+	}
+
+	zeros := Bytes2Hex(make([]byte, (l-len(str))/2))
+
+	return str + zeros
+
+}
+
+func Address(slice []byte) (addr []byte) {
+	if len(slice) < 20 {
+		addr = LeftPadBytes(slice, 20)
+	} else if len(slice) > 20 {
+		addr = slice[len(slice)-20:]
+	} else {
+		addr = slice
+	}
+
+	addr = CopyBytes(addr)
+
+	return
+}
+
+func ByteSliceToInterface(slice [][]byte) (ret []interface{}) {
+	for _, i := range slice {
+		ret = append(ret, i)
+	}
+
+	return
+}
diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..179a8c7efb958fdb9d28e982c7180eb07315472e
--- /dev/null
+++ b/ethutil/bytes_test.go
@@ -0,0 +1,193 @@
+package ethutil
+
+import (
+	checker "gopkg.in/check.v1"
+)
+
+type BytesSuite struct{}
+
+var _ = checker.Suite(&BytesSuite{})
+
+func (s *BytesSuite) TestByteString(c *checker.C) {
+	var data Bytes
+	data = []byte{102, 111, 111}
+	exp := "foo"
+	res := data.String()
+
+	c.Assert(res, checker.Equals, exp)
+}
+
+/*
+func (s *BytesSuite) TestDeleteFromByteSlice(c *checker.C) {
+	data := []byte{1, 2, 3, 4}
+	slice := []byte{1, 2, 3, 4}
+	exp := []byte{1, 4}
+	res := DeleteFromByteSlice(data, slice)
+
+	c.Assert(res, checker.DeepEquals, exp)
+}
+
+*/
+func (s *BytesSuite) TestNumberToBytes(c *checker.C) {
+	// data1 := int(1)
+	// res1 := NumberToBytes(data1, 16)
+	// c.Check(res1, checker.Panics)
+
+	var data2 float64 = 3.141592653
+	exp2 := []byte{0xe9, 0x38}
+	res2 := NumberToBytes(data2, 16)
+	c.Assert(res2, checker.DeepEquals, exp2)
+}
+
+func (s *BytesSuite) TestBytesToNumber(c *checker.C) {
+	datasmall := []byte{0xe9, 0x38, 0xe9, 0x38}
+	datalarge := []byte{0xe9, 0x38, 0xe9, 0x38, 0xe9, 0x38, 0xe9, 0x38}
+
+	var expsmall uint64 = 0xe938e938
+	var explarge uint64 = 0x0
+
+	ressmall := BytesToNumber(datasmall)
+	reslarge := BytesToNumber(datalarge)
+
+	c.Assert(ressmall, checker.Equals, expsmall)
+	c.Assert(reslarge, checker.Equals, explarge)
+
+}
+
+func (s *BytesSuite) TestReadVarInt(c *checker.C) {
+	data8 := []byte{1, 2, 3, 4, 5, 6, 7, 8}
+	data4 := []byte{1, 2, 3, 4}
+	data2 := []byte{1, 2}
+	data1 := []byte{1}
+
+	exp8 := uint64(72623859790382856)
+	exp4 := uint64(16909060)
+	exp2 := uint64(258)
+	exp1 := uint64(1)
+
+	res8 := ReadVarInt(data8)
+	res4 := ReadVarInt(data4)
+	res2 := ReadVarInt(data2)
+	res1 := ReadVarInt(data1)
+
+	c.Assert(res8, checker.Equals, exp8)
+	c.Assert(res4, checker.Equals, exp4)
+	c.Assert(res2, checker.Equals, exp2)
+	c.Assert(res1, checker.Equals, exp1)
+}
+
+func (s *BytesSuite) TestBinaryLength(c *checker.C) {
+	data1 := 0
+	data2 := 920987656789
+
+	exp1 := 0
+	exp2 := 5
+
+	res1 := BinaryLength(data1)
+	res2 := BinaryLength(data2)
+
+	c.Assert(res1, checker.Equals, exp1)
+	c.Assert(res2, checker.Equals, exp2)
+}
+
+func (s *BytesSuite) TestCopyBytes(c *checker.C) {
+	data1 := []byte{1, 2, 3, 4}
+	exp1 := []byte{1, 2, 3, 4}
+	res1 := CopyBytes(data1)
+	c.Assert(res1, checker.DeepEquals, exp1)
+}
+
+func (s *BytesSuite) TestIsHex(c *checker.C) {
+	data1 := "a9e67e"
+	exp1 := false
+	res1 := IsHex(data1)
+	c.Assert(res1, checker.DeepEquals, exp1)
+
+	data2 := "0xa9e67e00"
+	exp2 := true
+	res2 := IsHex(data2)
+	c.Assert(res2, checker.DeepEquals, exp2)
+
+}
+
+func (s *BytesSuite) TestParseDataString(c *checker.C) {
+	res1 := ParseData("hello", "world", "0x0106")
+	data := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000"
+	exp1 := Hex2Bytes(data)
+	c.Assert(res1, checker.DeepEquals, exp1)
+}
+
+func (s *BytesSuite) TestParseDataBytes(c *checker.C) {
+	data1 := []byte{232, 212, 165, 16, 0}
+	exp1 := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 212, 165, 16, 0}
+
+	res1 := ParseData(data1)
+	c.Assert(res1, checker.DeepEquals, exp1)
+
+}
+
+func (s *BytesSuite) TestLeftPadBytes(c *checker.C) {
+	val1 := []byte{1, 2, 3, 4}
+	exp1 := []byte{0, 0, 0, 0, 1, 2, 3, 4}
+
+	res1 := LeftPadBytes(val1, 8)
+	res2 := LeftPadBytes(val1, 2)
+
+	c.Assert(res1, checker.DeepEquals, exp1)
+	c.Assert(res2, checker.DeepEquals, val1)
+}
+
+func (s *BytesSuite) TestFormatData(c *checker.C) {
+	data1 := ""
+	data2 := "0xa9e67e00"
+	data3 := "a9e67e"
+	data4 := "\"a9e67e00\""
+
+	// exp1 := []byte{}
+	exp2 := []byte{00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0xa9, 0xe6, 0x7e, 00}
+	exp3 := []byte{00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}
+	exp4 := []byte{0x61, 0x39, 0x65, 0x36, 0x37, 0x65, 0x30, 0x30, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}
+
+	res1 := FormatData(data1)
+	res2 := FormatData(data2)
+	res3 := FormatData(data3)
+	res4 := FormatData(data4)
+
+	c.Assert(res1, checker.IsNil)
+	c.Assert(res2, checker.DeepEquals, exp2)
+	c.Assert(res3, checker.DeepEquals, exp3)
+	c.Assert(res4, checker.DeepEquals, exp4)
+}
+
+func (s *BytesSuite) TestRightPadBytes(c *checker.C) {
+	val := []byte{1, 2, 3, 4}
+	exp := []byte{1, 2, 3, 4, 0, 0, 0, 0}
+
+	resstd := RightPadBytes(val, 8)
+	resshrt := RightPadBytes(val, 2)
+
+	c.Assert(resstd, checker.DeepEquals, exp)
+	c.Assert(resshrt, checker.DeepEquals, val)
+}
+
+func (s *BytesSuite) TestLeftPadString(c *checker.C) {
+	val := "test"
+	exp := "\x30\x30\x30\x30" + val
+
+	resstd := LeftPadString(val, 8)
+	resshrt := LeftPadString(val, 2)
+
+	c.Assert(resstd, checker.Equals, exp)
+	c.Assert(resshrt, checker.Equals, val)
+}
+
+func (s *BytesSuite) TestRightPadString(c *checker.C) {
+	val := "test"
+	exp := val + "\x30\x30\x30\x30"
+
+	resstd := RightPadString(val, 8)
+	resshrt := RightPadString(val, 2)
+
+	c.Assert(resstd, checker.Equals, exp)
+	c.Assert(resshrt, checker.Equals, val)
+}
diff --git a/ethutil/common.go b/ethutil/common.go
new file mode 100644
index 0000000000000000000000000000000000000000..0a29cac6c7f7ebd5233c440369ab3f1563a3fede
--- /dev/null
+++ b/ethutil/common.go
@@ -0,0 +1,87 @@
+package ethutil
+
+import (
+	"fmt"
+	"math/big"
+	"runtime"
+)
+
+func IsWindows() bool {
+	return runtime.GOOS == "windows"
+}
+
+func WindonizePath(path string) string {
+	if string(path[0]) == "/" && IsWindows() {
+		path = path[1:]
+	}
+	return path
+}
+
+// The different number of units
+var (
+	Douglas  = BigPow(10, 42)
+	Einstein = BigPow(10, 21)
+	Ether    = BigPow(10, 18)
+	Finney   = BigPow(10, 15)
+	Szabo    = BigPow(10, 12)
+	Shannon  = BigPow(10, 9)
+	Babbage  = BigPow(10, 6)
+	Ada      = BigPow(10, 3)
+	Wei      = big.NewInt(1)
+)
+
+//
+// Currency to string
+// Returns a string representing a human readable format
+func CurrencyToString(num *big.Int) string {
+	var (
+		fin   *big.Int = num
+		denom string   = "Wei"
+	)
+
+	switch {
+	case num.Cmp(Douglas) >= 0:
+		fin = new(big.Int).Div(num, Douglas)
+		denom = "Douglas"
+	case num.Cmp(Einstein) >= 0:
+		fin = new(big.Int).Div(num, Einstein)
+		denom = "Einstein"
+	case num.Cmp(Ether) >= 0:
+		fin = new(big.Int).Div(num, Ether)
+		denom = "Ether"
+	case num.Cmp(Finney) >= 0:
+		fin = new(big.Int).Div(num, Finney)
+		denom = "Finney"
+	case num.Cmp(Szabo) >= 0:
+		fin = new(big.Int).Div(num, Szabo)
+		denom = "Szabo"
+	case num.Cmp(Shannon) >= 0:
+		fin = new(big.Int).Div(num, Shannon)
+		denom = "Shannon"
+	case num.Cmp(Babbage) >= 0:
+		fin = new(big.Int).Div(num, Babbage)
+		denom = "Babbage"
+	case num.Cmp(Ada) >= 0:
+		fin = new(big.Int).Div(num, Ada)
+		denom = "Ada"
+	}
+
+	// TODO add comment clarifying expected behavior
+	if len(fin.String()) > 5 {
+		return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom)
+	}
+
+	return fmt.Sprintf("%v %s", fin, denom)
+}
+
+// Common big integers often used
+var (
+	Big1     = big.NewInt(1)
+	Big2     = big.NewInt(2)
+	Big3     = big.NewInt(3)
+	Big0     = big.NewInt(0)
+	BigTrue  = Big1
+	BigFalse = Big0
+	Big32    = big.NewInt(32)
+	Big256   = big.NewInt(0xff)
+)
diff --git a/ethutil/common_test.go b/ethutil/common_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c2b6077e9bcdeb508cb1358e797e611cb9644044
--- /dev/null
+++ b/ethutil/common_test.go
@@ -0,0 +1,68 @@
+package ethutil
+
+import (
+	"math/big"
+	"os"
+
+	checker "gopkg.in/check.v1"
+)
+
+type CommonSuite struct{}
+
+var _ = checker.Suite(&CommonSuite{})
+
+func (s *CommonSuite) TestOS(c *checker.C) {
+	expwin := (os.PathSeparator == '\\' && os.PathListSeparator == ';')
+	res := IsWindows()
+
+	if !expwin {
+		c.Assert(res, checker.Equals, expwin, checker.Commentf("IsWindows is", res, "but path is", os.PathSeparator))
+	} else {
+		c.Assert(res, checker.Not(checker.Equals), expwin, checker.Commentf("IsWindows is", res, "but path is", os.PathSeparator))
+	}
+}
+
+func (s *CommonSuite) TestWindonziePath(c *checker.C) {
+	iswindowspath := os.PathSeparator == '\\'
+	path := "/opt/eth/test/file.ext"
+	res := WindonizePath(path)
+	ressep := string(res[0])
+
+	if !iswindowspath {
+		c.Assert(ressep, checker.Equals, "/")
+	} else {
+		c.Assert(ressep, checker.Not(checker.Equals), "/")
+	}
+}
+
+func (s *CommonSuite) TestCommon(c *checker.C) {
+	douglas := CurrencyToString(BigPow(10, 43))
+	einstein := CurrencyToString(BigPow(10, 22))
+	ether := CurrencyToString(BigPow(10, 19))
+	finney := CurrencyToString(BigPow(10, 16))
+	szabo := CurrencyToString(BigPow(10, 13))
+	shannon := CurrencyToString(BigPow(10, 10))
+	babbage := CurrencyToString(BigPow(10, 7))
+	ada := CurrencyToString(BigPow(10, 4))
+	wei := CurrencyToString(big.NewInt(10))
+
+	c.Assert(douglas, checker.Equals, "10 Douglas")
+	c.Assert(einstein, checker.Equals, "10 Einstein")
+	c.Assert(ether, checker.Equals, "10 Ether")
+	c.Assert(finney, checker.Equals, "10 Finney")
+	c.Assert(szabo, checker.Equals, "10 Szabo")
+	c.Assert(shannon, checker.Equals, "10 Shannon")
+	c.Assert(babbage, checker.Equals, "10 Babbage")
+	c.Assert(ada, checker.Equals, "10 Ada")
+	c.Assert(wei, checker.Equals, "10 Wei")
+}
+
+func (s *CommonSuite) TestLarge(c *checker.C) {
+	douglaslarge := CurrencyToString(BigPow(100000000, 43))
+	adalarge := CurrencyToString(BigPow(100000000, 4))
+	weilarge := CurrencyToString(big.NewInt(100000000))
+
+	c.Assert(douglaslarge, checker.Equals, "10000E298 Douglas")
+	c.Assert(adalarge, checker.Equals, "10000E7 Einstein")
+	c.Assert(weilarge, checker.Equals, "100 Babbage")
+}
diff --git a/ethutil/config.go b/ethutil/config.go
new file mode 100644
index 0000000000000000000000000000000000000000..ccc7714d01c1e1dd9ed546f3ff543fce7644e44b
--- /dev/null
+++ b/ethutil/config.go
@@ -0,0 +1,72 @@
+package ethutil
+
+import (
+	"flag"
+	"fmt"
+	"os"
+
+	"github.com/rakyll/globalconf"
+)
+
+// Config struct
+type ConfigManager struct {
+	Db Database
+
+	ExecPath string
+	Debug    bool
+	Diff     bool
+	DiffType string
+	Paranoia bool
+	VmType   int
+
+	conf *globalconf.GlobalConf
+}
+
+var Config *ConfigManager
+
+// Read config
+//
+// Initialize Config from Config File
+func ReadConfig(ConfigFile string, Datadir string, EnvPrefix string) *ConfigManager {
+	if Config == nil {
+		// create ConfigFile if does not exist, otherwise globalconf panic when trying to persist flags
+		if !FileExist(ConfigFile) {
+			fmt.Printf("config file '%s' doesn't exist, creating it\n", ConfigFile)
+			os.Create(ConfigFile)
+		}
+		g, err := globalconf.NewWithOptions(&globalconf.Options{
+			Filename:  ConfigFile,
+			EnvPrefix: EnvPrefix,
+		})
+		if err != nil {
+			fmt.Println(err)
+		} else {
+			g.ParseAll()
+		}
+		Config = &ConfigManager{ExecPath: Datadir, Debug: true, conf: g, Paranoia: true}
+	}
+	return Config
+}
+
+// provides persistence for flags
+func (c *ConfigManager) Save(key string, value interface{}) {
+	f := &flag.Flag{Name: key, Value: newConfValue(value)}
+	c.conf.Set("", f)
+}
+
+func (c *ConfigManager) Delete(key string) {
+	c.conf.Delete("", key)
+}
+
+// private type implementing flag.Value
+type confValue struct {
+	value string
+}
+
+// generic constructor to allow persising non-string values directly
+func newConfValue(value interface{}) *confValue {
+	return &confValue{fmt.Sprintf("%v", value)}
+}
+
+func (self confValue) String() string     { return self.value }
+func (self confValue) Set(s string) error { self.value = s; return nil }
diff --git a/ethutil/db.go b/ethutil/db.go
new file mode 100644
index 0000000000000000000000000000000000000000..e02a80fca7e493bb07d1575cb8c14eae8c006b99
--- /dev/null
+++ b/ethutil/db.go
@@ -0,0 +1,12 @@
+package ethutil
+
+// Database interface
+type Database interface {
+	Put(key []byte, value []byte)
+	Get(key []byte) ([]byte, error)
+	//GetKeys() []*Key
+	Delete(key []byte) error
+	LastKnownTD() []byte
+	Close()
+	Print()
+}
diff --git a/ethutil/list.go b/ethutil/list.go
new file mode 100644
index 0000000000000000000000000000000000000000..db276f1e3b38aed536ecd6e17322e39179a8b3c6
--- /dev/null
+++ b/ethutil/list.go
@@ -0,0 +1,81 @@
+package ethutil
+
+import (
+	"encoding/json"
+	"reflect"
+	"sync"
+)
+
+// The list type is an anonymous slice handler which can be used
+// for containing any slice type to use in an environment which
+// does not support slice types (e.g., JavaScript, QML)
+type List struct {
+	mut    sync.Mutex
+	val    interface{}
+	list   reflect.Value
+	Length int
+}
+
+// Initialise a new list. Panics if non-slice type is given.
+func NewList(t interface{}) *List {
+	list := reflect.ValueOf(t)
+	if list.Kind() != reflect.Slice {
+		panic("list container initialized with a non-slice type")
+	}
+
+	return &List{sync.Mutex{}, t, list, list.Len()}
+}
+
+func EmptyList() *List {
+	return NewList([]interface{}{})
+}
+
+// Get N element from the embedded slice. Returns nil if OOB.
+func (self *List) Get(i int) interface{} {
+	if self.list.Len() > i {
+		self.mut.Lock()
+		defer self.mut.Unlock()
+
+		i := self.list.Index(i).Interface()
+
+		return i
+	}
+
+	return nil
+}
+
+func (self *List) GetAsJson(i int) interface{} {
+	e := self.Get(i)
+
+	r, _ := json.Marshal(e)
+
+	return string(r)
+}
+
+// Appends value at the end of the slice. Panics when incompatible value
+// is given.
+func (self *List) Append(v interface{}) {
+	self.mut.Lock()
+	defer self.mut.Unlock()
+
+	self.list = reflect.Append(self.list, reflect.ValueOf(v))
+	self.Length = self.list.Len()
+}
+
+// Returns the underlying slice as interface.
+func (self *List) Interface() interface{} {
+	return self.list.Interface()
+}
+
+// For JavaScript <3
+func (self *List) ToJSON() string {
+	// make(T, 0) != nil
+	list := make([]interface{}, 0)
+	for i := 0; i < self.Length; i++ {
+		list = append(list, self.Get(i))
+	}
+
+	data, _ := json.Marshal(list)
+
+	return string(data)
+}
diff --git a/ethutil/main_test.go b/ethutil/main_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..fd4278ce795918e0a13483df843c570f0a97ac81
--- /dev/null
+++ b/ethutil/main_test.go
@@ -0,0 +1,9 @@
+package ethutil
+
+import (
+	"testing"
+
+	checker "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { checker.TestingT(t) }
diff --git a/ethutil/package.go b/ethutil/package.go
new file mode 100644
index 0000000000000000000000000000000000000000..e5df989d234675f7b5d177a0714a61ce00381aee
--- /dev/null
+++ b/ethutil/package.go
@@ -0,0 +1,123 @@
+package ethutil
+
+import (
+	"archive/zip"
+	"encoding/json"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"strings"
+)
+
+// Manifest object
+//
+// The manifest object holds all the relevant information supplied with the
+// the manifest specified in the package
+type Manifest struct {
+	Entry         string
+	Height, Width int
+}
+
+// External package
+//
+// External package contains the main html file and manifest
+type ExtPackage struct {
+	EntryHtml string
+	Manifest  *Manifest
+}
+
+// Read file
+//
+// Read a given compressed file and returns the read bytes.
+// Returns an error otherwise
+func ReadFile(f *zip.File) ([]byte, error) {
+	rc, err := f.Open()
+	if err != nil {
+		return nil, err
+	}
+	defer rc.Close()
+
+	content, err := ioutil.ReadAll(rc)
+	if err != nil {
+		return nil, err
+	}
+
+	return content, nil
+}
+
+// Reads manifest
+//
+// Reads and returns a manifest object. Returns error otherwise
+func ReadManifest(m []byte) (*Manifest, error) {
+	var manifest Manifest
+
+	dec := json.NewDecoder(strings.NewReader(string(m)))
+	if err := dec.Decode(&manifest); err == io.EOF {
+	} else if err != nil {
+		return nil, err
+	}
+
+	return &manifest, nil
+}
+
+// Find file in archive
+//
+// Returns the index of the given file name if it exists. -1 if file not found
+func FindFileInArchive(fn string, files []*zip.File) (index int) {
+	index = -1
+	// Find the manifest first
+	for i, f := range files {
+		if f.Name == fn {
+			index = i
+		}
+	}
+
+	return
+}
+
+// Open package
+//
+// Opens a prepared ethereum package
+// Reads the manifest file and determines file contents and returns and
+// the external package.
+func OpenPackage(fn string) (*ExtPackage, error) {
+	r, err := zip.OpenReader(fn)
+	if err != nil {
+		return nil, err
+	}
+	defer r.Close()
+
+	manifestIndex := FindFileInArchive("manifest.json", r.File)
+
+	if manifestIndex < 0 {
+		return nil, fmt.Errorf("No manifest file found in archive")
+	}
+
+	f, err := ReadFile(r.File[manifestIndex])
+	if err != nil {
+		return nil, err
+	}
+
+	manifest, err := ReadManifest(f)
+	if err != nil {
+		return nil, err
+	}
+
+	if manifest.Entry == "" {
+		return nil, fmt.Errorf("Entry file specified but appears to be empty: %s", manifest.Entry)
+	}
+
+	entryIndex := FindFileInArchive(manifest.Entry, r.File)
+	if entryIndex < 0 {
+		return nil, fmt.Errorf("Entry file not found: '%s'", manifest.Entry)
+	}
+
+	f, err = ReadFile(r.File[entryIndex])
+	if err != nil {
+		return nil, err
+	}
+
+	extPackage := &ExtPackage{string(f), manifest}
+
+	return extPackage, nil
+}
diff --git a/ethutil/path.go b/ethutil/path.go
new file mode 100644
index 0000000000000000000000000000000000000000..cfbc389508cc1517da208e0844db064fcc51206a
--- /dev/null
+++ b/ethutil/path.go
@@ -0,0 +1,60 @@
+package ethutil
+
+import (
+	"io/ioutil"
+	"os"
+	"os/user"
+	"strings"
+)
+
+func ExpandHomePath(p string) (path string) {
+	path = p
+
+	// Check in case of paths like "/something/~/something/"
+	if path[:2] == "~/" {
+		usr, _ := user.Current()
+		dir := usr.HomeDir
+
+		path = strings.Replace(p, "~", dir, 1)
+	}
+
+	return
+}
+
+func FileExist(filePath string) bool {
+	_, err := os.Stat(filePath)
+	if err != nil && os.IsNotExist(err) {
+		return false
+	}
+
+	return true
+}
+
+func ReadAllFile(filePath string) (string, error) {
+	file, err := os.Open(filePath)
+	if err != nil {
+		return "", err
+	}
+
+	data, err := ioutil.ReadAll(file)
+	if err != nil {
+		return "", err
+	}
+
+	return string(data), nil
+}
+
+func WriteFile(filePath string, content []byte) error {
+	fh, err := os.OpenFile(filePath, os.O_TRUNC|os.O_RDWR|os.O_CREATE, os.ModePerm)
+	if err != nil {
+		return err
+	}
+	defer fh.Close()
+
+	_, err = fh.Write(content)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
diff --git a/ethutil/path_test.go b/ethutil/path_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..908c94ee7b08061323562b549f3e51dcdddfbd79
--- /dev/null
+++ b/ethutil/path_test.go
@@ -0,0 +1,51 @@
+package ethutil
+
+import (
+	// "os"
+	"testing"
+)
+
+func TestGoodFile(t *testing.T) {
+	goodpath := "~/goethereumtest.pass"
+	path := ExpandHomePath(goodpath)
+	contentstring := "3.14159265358979323846"
+
+	err := WriteFile(path, []byte(contentstring))
+	if err != nil {
+		t.Error("Could not write file")
+	}
+
+	if !FileExist(path) {
+		t.Error("File not found at", path)
+	}
+
+	v, err := ReadAllFile(path)
+	if err != nil {
+		t.Error("Could not read file", path)
+	}
+	if v != contentstring {
+		t.Error("Expected", contentstring, "Got", v)
+	}
+
+}
+
+func TestBadFile(t *testing.T) {
+	badpath := "/this/path/should/not/exist/goethereumtest.fail"
+	path := ExpandHomePath(badpath)
+	contentstring := "3.14159265358979323846"
+
+	err := WriteFile(path, []byte(contentstring))
+	if err == nil {
+		t.Error("Wrote file, but should not be able to", path)
+	}
+
+	if FileExist(path) {
+		t.Error("Found file, but should not be able to", path)
+	}
+
+	v, err := ReadAllFile(path)
+	if err == nil {
+		t.Error("Read file, but should not be able to", v)
+	}
+
+}
diff --git a/ethutil/rand.go b/ethutil/rand.go
new file mode 100644
index 0000000000000000000000000000000000000000..91dafec7ed6f960c5c731ac215bc4c09dcfb88e1
--- /dev/null
+++ b/ethutil/rand.go
@@ -0,0 +1,24 @@
+package ethutil
+
+import (
+	"crypto/rand"
+	"encoding/binary"
+	"io"
+)
+
+func randomUint64(r io.Reader) (uint64, error) {
+	b := make([]byte, 8)
+	n, err := r.Read(b)
+	if n != len(b) {
+		return 0, io.ErrShortBuffer
+	}
+	if err != nil {
+		return 0, err
+	}
+	return binary.BigEndian.Uint64(b), nil
+}
+
+// RandomUint64 returns a cryptographically random uint64 value.
+func RandomUint64() (uint64, error) {
+	return randomUint64(rand.Reader)
+}
diff --git a/ethutil/rand_test.go b/ethutil/rand_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c12698538f389b2b45d017bdf046673b41e8e441
--- /dev/null
+++ b/ethutil/rand_test.go
@@ -0,0 +1,17 @@
+package ethutil
+
+import (
+	checker "gopkg.in/check.v1"
+)
+
+type RandomSuite struct{}
+
+var _ = checker.Suite(&RandomSuite{})
+
+func (s *RandomSuite) TestRandomUint64(c *checker.C) {
+	res1, _ := RandomUint64()
+	res2, _ := RandomUint64()
+	c.Assert(res1, checker.NotNil)
+	c.Assert(res2, checker.NotNil)
+	c.Assert(res1, checker.Not(checker.Equals), res2)
+}
diff --git a/ethutil/rlp.go b/ethutil/rlp.go
new file mode 100644
index 0000000000000000000000000000000000000000..1bc1a58a715533fe576af796470888e15653bda8
--- /dev/null
+++ b/ethutil/rlp.go
@@ -0,0 +1,276 @@
+package ethutil
+
+import (
+	"bytes"
+	"fmt"
+	"math/big"
+	"reflect"
+)
+
+type RlpEncode interface {
+	RlpEncode() []byte
+}
+
+type RlpEncodeDecode interface {
+	RlpEncode
+	RlpValue() []interface{}
+}
+
+type RlpEncodable interface {
+	RlpData() interface{}
+}
+
+func Rlp(encoder RlpEncode) []byte {
+	return encoder.RlpEncode()
+}
+
+type RlpEncoder struct {
+	rlpData []byte
+}
+
+func NewRlpEncoder() *RlpEncoder {
+	encoder := &RlpEncoder{}
+
+	return encoder
+}
+func (coder *RlpEncoder) EncodeData(rlpData interface{}) []byte {
+	return Encode(rlpData)
+}
+
+const (
+	RlpEmptyList = 0x80
+	RlpEmptyStr  = 0x40
+)
+
+const rlpEof = -1
+
+func Char(c []byte) int {
+	if len(c) > 0 {
+		return int(c[0])
+	}
+
+	return rlpEof
+}
+
+func DecodeWithReader(reader *bytes.Buffer) interface{} {
+	var slice []interface{}
+
+	// Read the next byte
+	char := Char(reader.Next(1))
+	switch {
+	case char <= 0x7f:
+		return char
+
+	case char <= 0xb7:
+		return reader.Next(int(char - 0x80))
+
+	case char <= 0xbf:
+		length := ReadVarInt(reader.Next(int(char - 0xb7)))
+
+		return reader.Next(int(length))
+
+	case char <= 0xf7:
+		length := int(char - 0xc0)
+		for i := 0; i < length; i++ {
+			obj := DecodeWithReader(reader)
+			slice = append(slice, obj)
+		}
+
+		return slice
+	case char <= 0xff:
+		length := ReadVarInt(reader.Next(int(char - 0xf7)))
+		for i := uint64(0); i < length; i++ {
+			obj := DecodeWithReader(reader)
+			slice = append(slice, obj)
+		}
+
+		return slice
+	default:
+		panic(fmt.Sprintf("byte not supported: %q", char))
+	}
+
+	return slice
+}
+
+var (
+	directRlp = big.NewInt(0x7f)
+	numberRlp = big.NewInt(0xb7)
+	zeroRlp   = big.NewInt(0x0)
+)
+
+func intlen(i int64) (length int) {
+	for i > 0 {
+		i = i >> 8
+		length++
+	}
+	return
+}
+
+func Encode(object interface{}) []byte {
+	var buff bytes.Buffer
+
+	if object != nil {
+		switch t := object.(type) {
+		case *Value:
+			buff.Write(Encode(t.Raw()))
+		case RlpEncodable:
+			buff.Write(Encode(t.RlpData()))
+		// Code dup :-/
+		case int:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case uint:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case int8:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case int16:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case int32:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case int64:
+			buff.Write(Encode(big.NewInt(t)))
+		case uint16:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case uint32:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case uint64:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case byte:
+			buff.Write(Encode(big.NewInt(int64(t))))
+		case *big.Int:
+			// Not sure how this is possible while we check for
+			if t == nil {
+				buff.WriteByte(0xc0)
+			} else {
+				buff.Write(Encode(t.Bytes()))
+			}
+		case Bytes:
+			buff.Write(Encode([]byte(t)))
+		case []byte:
+			if len(t) == 1 && t[0] <= 0x7f {
+				buff.Write(t)
+			} else if len(t) < 56 {
+				buff.WriteByte(byte(len(t) + 0x80))
+				buff.Write(t)
+			} else {
+				b := big.NewInt(int64(len(t)))
+				buff.WriteByte(byte(len(b.Bytes()) + 0xb7))
+				buff.Write(b.Bytes())
+				buff.Write(t)
+			}
+		case string:
+			buff.Write(Encode([]byte(t)))
+		case []interface{}:
+			// Inline function for writing the slice header
+			WriteSliceHeader := func(length int) {
+				if length < 56 {
+					buff.WriteByte(byte(length + 0xc0))
+				} else {
+					b := big.NewInt(int64(length))
+					buff.WriteByte(byte(len(b.Bytes()) + 0xf7))
+					buff.Write(b.Bytes())
+				}
+			}
+
+			var b bytes.Buffer
+			for _, val := range t {
+				b.Write(Encode(val))
+			}
+			WriteSliceHeader(len(b.Bytes()))
+			buff.Write(b.Bytes())
+		default:
+			// This is how it should have been from the start
+			// needs refactoring (@fjl)
+			v := reflect.ValueOf(t)
+			switch v.Kind() {
+			case reflect.Slice:
+				var b bytes.Buffer
+				for i := 0; i < v.Len(); i++ {
+					b.Write(Encode(v.Index(i).Interface()))
+				}
+
+				blen := b.Len()
+				if blen < 56 {
+					buff.WriteByte(byte(blen) + 0xc0)
+				} else {
+					ilen := byte(intlen(int64(blen)))
+					buff.WriteByte(ilen + 0xf7)
+					t := make([]byte, ilen)
+					for i := byte(0); i < ilen; i++ {
+						t[ilen-i-1] = byte(blen >> (i * 8))
+					}
+					buff.Write(t)
+				}
+				buff.ReadFrom(&b)
+			}
+		}
+	} else {
+		// Empty list for nil
+		buff.WriteByte(0xc0)
+	}
+
+	return buff.Bytes()
+}
+
+// TODO Use a bytes.Buffer instead of a raw byte slice.
+// Cleaner code, and use draining instead of seeking the next bytes to read
+func Decode(data []byte, pos uint64) (interface{}, uint64) {
+	var slice []interface{}
+	char := int(data[pos])
+	switch {
+	case char <= 0x7f:
+		return data[pos], pos + 1
+
+	case char <= 0xb7:
+		b := uint64(data[pos]) - 0x80
+
+		return data[pos+1 : pos+1+b], pos + 1 + b
+
+	case char <= 0xbf:
+		b := uint64(data[pos]) - 0xb7
+
+		b2 := ReadVarInt(data[pos+1 : pos+1+b])
+
+		return data[pos+1+b : pos+1+b+b2], pos + 1 + b + b2
+
+	case char <= 0xf7:
+		b := uint64(data[pos]) - 0xc0
+		prevPos := pos
+		pos++
+		for i := uint64(0); i < b; {
+			var obj interface{}
+
+			// Get the next item in the data list and append it
+			obj, prevPos = Decode(data, pos)
+			slice = append(slice, obj)
+
+			// Increment i by the amount bytes read in the previous
+			// read
+			i += (prevPos - pos)
+			pos = prevPos
+		}
+		return slice, pos
+
+	case char <= 0xff:
+		l := uint64(data[pos]) - 0xf7
+		b := ReadVarInt(data[pos+1 : pos+1+l])
+
+		pos = pos + l + 1
+
+		prevPos := b
+		for i := uint64(0); i < uint64(b); {
+			var obj interface{}
+
+			obj, prevPos = Decode(data, pos)
+			slice = append(slice, obj)
+
+			i += (prevPos - pos)
+			pos = prevPos
+		}
+		return slice, pos
+
+	default:
+		panic(fmt.Sprintf("byte not supported: %q", char))
+	}
+
+	return slice, 0
+}
diff --git a/ethutil/rlp_test.go b/ethutil/rlp_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..ff98d3269957da110c538ea54398a86495eacf1f
--- /dev/null
+++ b/ethutil/rlp_test.go
@@ -0,0 +1,156 @@
+package ethutil
+
+import (
+	"bytes"
+	"math/big"
+	"reflect"
+	"testing"
+)
+
+func TestNonInterfaceSlice(t *testing.T) {
+	vala := []string{"value1", "value2", "value3"}
+	valb := []interface{}{"value1", "value2", "value3"}
+	resa := Encode(vala)
+	resb := Encode(valb)
+	if !bytes.Equal(resa, resb) {
+		t.Errorf("expected []string & []interface{} to be equal")
+	}
+}
+
+func TestRlpValueEncoding(t *testing.T) {
+	val := EmptyValue()
+	val.AppendList().Append(1).Append(2).Append(3)
+	val.Append("4").AppendList().Append(5)
+
+	res := val.Encode()
+	exp := Encode([]interface{}{[]interface{}{1, 2, 3}, "4", []interface{}{5}})
+	if bytes.Compare(res, exp) != 0 {
+		t.Errorf("expected %q, got %q", res, exp)
+	}
+}
+
+func TestValueSlice(t *testing.T) {
+	val := []interface{}{
+		"value1",
+		"valeu2",
+		"value3",
+	}
+
+	value := NewValue(val)
+	splitVal := value.SliceFrom(1)
+
+	if splitVal.Len() != 2 {
+		t.Error("SliceFrom: Expected len", 2, "got", splitVal.Len())
+	}
+
+	splitVal = value.SliceTo(2)
+	if splitVal.Len() != 2 {
+		t.Error("SliceTo: Expected len", 2, "got", splitVal.Len())
+	}
+
+	splitVal = value.SliceFromTo(1, 3)
+	if splitVal.Len() != 2 {
+		t.Error("SliceFromTo: Expected len", 2, "got", splitVal.Len())
+	}
+}
+
+func TestLargeData(t *testing.T) {
+	data := make([]byte, 100000)
+	enc := Encode(data)
+	value := NewValue(enc)
+	value.Decode()
+
+	if value.Len() != len(data) {
+		t.Error("Expected data to be", len(data), "got", value.Len())
+	}
+}
+
+func TestValue(t *testing.T) {
+	value := NewValueFromBytes([]byte("\xcd\x83dog\x83god\x83cat\x01"))
+	if value.Get(0).Str() != "dog" {
+		t.Errorf("expected '%v', got '%v'", value.Get(0).Str(), "dog")
+	}
+
+	if value.Get(3).Uint() != 1 {
+		t.Errorf("expected '%v', got '%v'", value.Get(3).Uint(), 1)
+	}
+}
+
+func TestEncode(t *testing.T) {
+	strRes := "\x83dog"
+	bytes := Encode("dog")
+
+	str := string(bytes)
+	if str != strRes {
+		t.Errorf("Expected %q, got %q", strRes, str)
+	}
+
+	sliceRes := "\xcc\x83dog\x83god\x83cat"
+	strs := []interface{}{"dog", "god", "cat"}
+	bytes = Encode(strs)
+	slice := string(bytes)
+	if slice != sliceRes {
+		t.Error("Expected %q, got %q", sliceRes, slice)
+	}
+
+	intRes := "\x82\x04\x00"
+	bytes = Encode(1024)
+	if string(bytes) != intRes {
+		t.Errorf("Expected %q, got %q", intRes, bytes)
+	}
+}
+
+func TestDecode(t *testing.T) {
+	single := []byte("\x01")
+	b, _ := Decode(single, 0)
+
+	if b.(uint8) != 1 {
+		t.Errorf("Expected 1, got %q", b)
+	}
+
+	str := []byte("\x83dog")
+	b, _ = Decode(str, 0)
+	if bytes.Compare(b.([]byte), []byte("dog")) != 0 {
+		t.Errorf("Expected dog, got %q", b)
+	}
+
+	slice := []byte("\xcc\x83dog\x83god\x83cat")
+	res := []interface{}{"dog", "god", "cat"}
+	b, _ = Decode(slice, 0)
+	if reflect.DeepEqual(b, res) {
+		t.Errorf("Expected %q, got %q", res, b)
+	}
+}
+
+func TestEncodeDecodeBigInt(t *testing.T) {
+	bigInt := big.NewInt(1391787038)
+	encoded := Encode(bigInt)
+
+	value := NewValueFromBytes(encoded)
+	if value.BigInt().Cmp(bigInt) != 0 {
+		t.Errorf("Expected %v, got %v", bigInt, value.BigInt())
+	}
+}
+
+func TestEncodeDecodeBytes(t *testing.T) {
+	b := NewValue([]interface{}{[]byte{1, 2, 3, 4, 5}, byte(6)})
+	val := NewValueFromBytes(b.Encode())
+	if !b.Cmp(val) {
+		t.Errorf("Expected %v, got %v", val, b)
+	}
+}
+
+func TestEncodeZero(t *testing.T) {
+	b := NewValue(0).Encode()
+	exp := []byte{0xc0}
+	if bytes.Compare(b, exp) == 0 {
+		t.Error("Expected", exp, "got", b)
+	}
+}
+
+func BenchmarkEncodeDecode(b *testing.B) {
+	for i := 0; i < b.N; i++ {
+		bytes := Encode([]interface{}{"dog", "god", "cat"})
+		Decode(bytes, 0)
+	}
+}
diff --git a/ethutil/script_unix.go b/ethutil/script_unix.go
new file mode 100644
index 0000000000000000000000000000000000000000..9250dda57d7b603e43a9e7d6f99f0867794a9ffa
--- /dev/null
+++ b/ethutil/script_unix.go
@@ -0,0 +1,19 @@
+// +build !windows
+
+package ethutil
+
+import "github.com/ethereum/serpent-go"
+
+// General compile function
+func Compile(script string, silent bool) (ret []byte, err error) {
+	if len(script) > 2 {
+		byteCode, err := serpent.Compile(script)
+		if err != nil {
+			return nil, err
+		}
+
+		return byteCode, nil
+	}
+
+	return nil, nil
+}
diff --git a/ethutil/script_windows.go b/ethutil/script_windows.go
new file mode 100644
index 0000000000000000000000000000000000000000..1dedc5f60ef37c9c9a949c6b8f1f8b24f65130a2
--- /dev/null
+++ b/ethutil/script_windows.go
@@ -0,0 +1,12 @@
+// +build windows
+
+package ethutil
+
+// General compile function
+func Compile(script string, silent bool) (ret []byte, err error) {
+	if len(script) > 2 {
+		return nil, nil
+	}
+
+	return nil, nil
+}
diff --git a/ethutil/set.go b/ethutil/set.go
new file mode 100644
index 0000000000000000000000000000000000000000..7955edac071a16c16eec4c7edd747eb85d7d3ee3
--- /dev/null
+++ b/ethutil/set.go
@@ -0,0 +1,36 @@
+package ethutil
+
+type Settable interface {
+	AsSet() UniqueSet
+}
+
+type Stringable interface {
+	String() string
+}
+
+type UniqueSet map[string]struct{}
+
+func NewSet(v ...Stringable) UniqueSet {
+	set := make(UniqueSet)
+	for _, val := range v {
+		set.Insert(val)
+	}
+
+	return set
+}
+
+func (self UniqueSet) Insert(k Stringable) UniqueSet {
+	self[k.String()] = struct{}{}
+
+	return self
+}
+
+func (self UniqueSet) Include(k Stringable) bool {
+	_, ok := self[k.String()]
+
+	return ok
+}
+
+func Set(s Settable) UniqueSet {
+	return s.AsSet()
+}
diff --git a/ethutil/size.go b/ethutil/size.go
new file mode 100644
index 0000000000000000000000000000000000000000..b4426465e6139dcf558a2999f8130260f46530a5
--- /dev/null
+++ b/ethutil/size.go
@@ -0,0 +1,15 @@
+package ethutil
+
+import "fmt"
+
+type StorageSize float64
+
+func (self StorageSize) String() string {
+	if self > 1000000 {
+		return fmt.Sprintf("%.2f mB", self/1000000)
+	} else if self > 1000 {
+		return fmt.Sprintf("%.2f kB", self/1000)
+	} else {
+		return fmt.Sprintf("%.2f B", self)
+	}
+}
diff --git a/ethutil/size_test.go b/ethutil/size_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..e0f28abc5d38a9847b0e382e33bc10d77aa978de
--- /dev/null
+++ b/ethutil/size_test.go
@@ -0,0 +1,23 @@
+package ethutil
+
+import (
+	checker "gopkg.in/check.v1"
+)
+
+type SizeSuite struct{}
+
+var _ = checker.Suite(&SizeSuite{})
+
+func (s *SizeSuite) TestStorageSizeString(c *checker.C) {
+	data1 := 2381273
+	data2 := 2192
+	data3 := 12
+
+	exp1 := "2.38 mB"
+	exp2 := "2.19 kB"
+	exp3 := "12.00 B"
+
+	c.Assert(StorageSize(data1).String(), checker.Equals, exp1)
+	c.Assert(StorageSize(data2).String(), checker.Equals, exp2)
+	c.Assert(StorageSize(data3).String(), checker.Equals, exp3)
+}
diff --git a/ethutil/value.go b/ethutil/value.go
new file mode 100644
index 0000000000000000000000000000000000000000..7d4a7d98c387d9c547ab1b80973672c7b0527fe1
--- /dev/null
+++ b/ethutil/value.go
@@ -0,0 +1,401 @@
+package ethutil
+
+import (
+	"bytes"
+	"fmt"
+	"math/big"
+	"reflect"
+	"strconv"
+)
+
+// Data values are returned by the rlp decoder. The data values represents
+// one item within the rlp data structure. It's responsible for all the casting
+// It always returns something valid
+type Value struct {
+	Val  interface{}
+	kind reflect.Value
+}
+
+func (val *Value) String() string {
+	return fmt.Sprintf("%x", val.Val)
+}
+
+func NewValue(val interface{}) *Value {
+	t := val
+	if v, ok := val.(*Value); ok {
+		t = v.Val
+	}
+
+	return &Value{Val: t}
+}
+
+func (val *Value) Type() reflect.Kind {
+	return reflect.TypeOf(val.Val).Kind()
+}
+
+func (val *Value) IsNil() bool {
+	return val.Val == nil
+}
+
+func (val *Value) Len() int {
+	//return val.kind.Len()
+	if data, ok := val.Val.([]interface{}); ok {
+		return len(data)
+	}
+
+	return len(val.Bytes())
+}
+
+func (val *Value) Raw() interface{} {
+	return val.Val
+}
+
+func (val *Value) Interface() interface{} {
+	return val.Val
+}
+
+func (val *Value) Uint() uint64 {
+	if Val, ok := val.Val.(uint8); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(uint16); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(uint32); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(uint64); ok {
+		return Val
+	} else if Val, ok := val.Val.(float32); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(float64); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(int); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.(uint); ok {
+		return uint64(Val)
+	} else if Val, ok := val.Val.([]byte); ok {
+		return new(big.Int).SetBytes(Val).Uint64()
+	} else if Val, ok := val.Val.(*big.Int); ok {
+		return Val.Uint64()
+	}
+
+	return 0
+}
+
+func (val *Value) Int() int64 {
+	if Val, ok := val.Val.(int8); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.(int16); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.(int32); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.(int64); ok {
+		return Val
+	} else if Val, ok := val.Val.(int); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.(float32); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.(float64); ok {
+		return int64(Val)
+	} else if Val, ok := val.Val.([]byte); ok {
+		return new(big.Int).SetBytes(Val).Int64()
+	} else if Val, ok := val.Val.(*big.Int); ok {
+		return Val.Int64()
+	} else if Val, ok := val.Val.(string); ok {
+		n, _ := strconv.Atoi(Val)
+		return int64(n)
+	}
+
+	return 0
+}
+
+func (val *Value) Byte() byte {
+	if Val, ok := val.Val.(byte); ok {
+		return Val
+	}
+
+	return 0x0
+}
+
+func (val *Value) BigInt() *big.Int {
+	if a, ok := val.Val.([]byte); ok {
+		b := new(big.Int).SetBytes(a)
+
+		return b
+	} else if a, ok := val.Val.(*big.Int); ok {
+		return a
+	} else if a, ok := val.Val.(string); ok {
+		return Big(a)
+	} else {
+		return big.NewInt(int64(val.Uint()))
+	}
+
+	return big.NewInt(0)
+}
+
+func (val *Value) Str() string {
+	if a, ok := val.Val.([]byte); ok {
+		return string(a)
+	} else if a, ok := val.Val.(string); ok {
+		return a
+	} else if a, ok := val.Val.(byte); ok {
+		return string(a)
+	}
+
+	return ""
+}
+
+func (val *Value) Bytes() []byte {
+	if a, ok := val.Val.([]byte); ok {
+		return a
+	} else if s, ok := val.Val.(byte); ok {
+		return []byte{s}
+	} else if s, ok := val.Val.(string); ok {
+		return []byte(s)
+	} else if s, ok := val.Val.(*big.Int); ok {
+		return s.Bytes()
+	} else {
+		return big.NewInt(val.Int()).Bytes()
+	}
+
+	return []byte{}
+}
+
+func (val *Value) Err() error {
+	if err, ok := val.Val.(error); ok {
+		return err
+	}
+
+	return nil
+}
+
+func (val *Value) Slice() []interface{} {
+	if d, ok := val.Val.([]interface{}); ok {
+		return d
+	}
+
+	return []interface{}{}
+}
+
+func (val *Value) SliceFrom(from int) *Value {
+	slice := val.Slice()
+
+	return NewValue(slice[from:])
+}
+
+func (val *Value) SliceTo(to int) *Value {
+	slice := val.Slice()
+
+	return NewValue(slice[:to])
+}
+
+func (val *Value) SliceFromTo(from, to int) *Value {
+	slice := val.Slice()
+
+	return NewValue(slice[from:to])
+}
+
+// TODO More type checking methods
+func (val *Value) IsSlice() bool {
+	return val.Type() == reflect.Slice
+}
+
+func (val *Value) IsStr() bool {
+	return val.Type() == reflect.String
+}
+
+func (self *Value) IsErr() bool {
+	_, ok := self.Val.(error)
+	return ok
+}
+
+// Special list checking function. Something is considered
+// a list if it's of type []interface{}. The list is usually
+// used in conjunction with rlp decoded streams.
+func (val *Value) IsList() bool {
+	_, ok := val.Val.([]interface{})
+
+	return ok
+}
+
+func (val *Value) IsEmpty() bool {
+	return val.Val == nil || ((val.IsSlice() || val.IsStr()) && val.Len() == 0)
+}
+
+// Threat the value as a slice
+func (val *Value) Get(idx int) *Value {
+	if d, ok := val.Val.([]interface{}); ok {
+		// Guard for oob
+		if len(d) <= idx {
+			return NewValue(nil)
+		}
+
+		if idx < 0 {
+			return NewValue(nil)
+		}
+
+		return NewValue(d[idx])
+	}
+
+	// If this wasn't a slice you probably shouldn't be using this function
+	return NewValue(nil)
+}
+
+func (self *Value) Copy() *Value {
+	switch val := self.Val.(type) {
+	case *big.Int:
+		return NewValue(new(big.Int).Set(val))
+	case []byte:
+		return NewValue(CopyBytes(val))
+	default:
+		return NewValue(self.Val)
+	}
+
+	return nil
+}
+
+func (val *Value) Cmp(o *Value) bool {
+	return reflect.DeepEqual(val.Val, o.Val)
+}
+
+func (self *Value) DeepCmp(o *Value) bool {
+	return bytes.Compare(self.Bytes(), o.Bytes()) == 0
+}
+
+func (val *Value) Encode() []byte {
+	return Encode(val.Val)
+}
+
+// Assume that the data we have is encoded
+func (self *Value) Decode() {
+	v, _ := Decode(self.Bytes(), 0)
+	self.Val = v
+	//self.Val = DecodeWithReader(bytes.NewBuffer(self.Bytes()))
+}
+
+func NewValueFromBytes(data []byte) *Value {
+	if len(data) != 0 {
+		value := NewValue(data)
+		value.Decode()
+
+		return value
+	}
+
+	return NewValue(nil)
+}
+
+// Value setters
+func NewSliceValue(s interface{}) *Value {
+	list := EmptyValue()
+
+	if s != nil {
+		if slice, ok := s.([]interface{}); ok {
+			for _, val := range slice {
+				list.Append(val)
+			}
+		} else if slice, ok := s.([]string); ok {
+			for _, val := range slice {
+				list.Append(val)
+			}
+		}
+	}
+
+	return list
+}
+
+func EmptyValue() *Value {
+	return NewValue([]interface{}{})
+}
+
+func (val *Value) AppendList() *Value {
+	list := EmptyValue()
+	val.Val = append(val.Slice(), list)
+
+	return list
+}
+
+func (val *Value) Append(v interface{}) *Value {
+	val.Val = append(val.Slice(), v)
+
+	return val
+}
+
+const (
+	valOpAdd = iota
+	valOpDiv
+	valOpMul
+	valOpPow
+	valOpSub
+)
+
+// Math stuff
+func (self *Value) doOp(op int, other interface{}) *Value {
+	left := self.BigInt()
+	right := NewValue(other).BigInt()
+
+	switch op {
+	case valOpAdd:
+		self.Val = left.Add(left, right)
+	case valOpDiv:
+		self.Val = left.Div(left, right)
+	case valOpMul:
+		self.Val = left.Mul(left, right)
+	case valOpPow:
+		self.Val = left.Exp(left, right, Big0)
+	case valOpSub:
+		self.Val = left.Sub(left, right)
+	}
+
+	return self
+}
+
+func (self *Value) Add(other interface{}) *Value {
+	return self.doOp(valOpAdd, other)
+}
+
+func (self *Value) Sub(other interface{}) *Value {
+	return self.doOp(valOpSub, other)
+}
+
+func (self *Value) Div(other interface{}) *Value {
+	return self.doOp(valOpDiv, other)
+}
+
+func (self *Value) Mul(other interface{}) *Value {
+	return self.doOp(valOpMul, other)
+}
+
+func (self *Value) Pow(other interface{}) *Value {
+	return self.doOp(valOpPow, other)
+}
+
+type ValueIterator struct {
+	value        *Value
+	currentValue *Value
+	idx          int
+}
+
+func (val *Value) NewIterator() *ValueIterator {
+	return &ValueIterator{value: val}
+}
+
+func (it *ValueIterator) Len() int {
+	return it.value.Len()
+}
+
+func (it *ValueIterator) Next() bool {
+	if it.idx >= it.value.Len() {
+		return false
+	}
+
+	it.currentValue = it.value.Get(it.idx)
+	it.idx++
+
+	return true
+}
+
+func (it *ValueIterator) Value() *Value {
+	return it.currentValue
+}
+
+func (it *ValueIterator) Idx() int {
+	return it.idx - 1
+}
diff --git a/ethutil/value_test.go b/ethutil/value_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..861d35184f5eb5c8cadefca5a5ea323360d1b59f
--- /dev/null
+++ b/ethutil/value_test.go
@@ -0,0 +1,70 @@
+package ethutil
+
+import (
+	"math/big"
+
+	checker "gopkg.in/check.v1"
+)
+
+type ValueSuite struct{}
+
+var _ = checker.Suite(&ValueSuite{})
+
+func (s *ValueSuite) TestValueCmp(c *checker.C) {
+	val1 := NewValue("hello")
+	val2 := NewValue("world")
+	c.Assert(val1.Cmp(val2), checker.Equals, false)
+
+	val3 := NewValue("hello")
+	val4 := NewValue("hello")
+	c.Assert(val3.Cmp(val4), checker.Equals, true)
+}
+
+func (s *ValueSuite) TestValueTypes(c *checker.C) {
+	str := NewValue("str")
+	num := NewValue(1)
+	inter := NewValue([]interface{}{1})
+	byt := NewValue([]byte{1, 2, 3, 4})
+	bigInt := NewValue(big.NewInt(10))
+
+	strExp := "str"
+	numExp := uint64(1)
+	interExp := []interface{}{1}
+	bytExp := []byte{1, 2, 3, 4}
+	bigExp := big.NewInt(10)
+
+	c.Assert(str.Str(), checker.Equals, strExp)
+	c.Assert(num.Uint(), checker.Equals, numExp)
+	c.Assert(NewValue(inter.Interface()).Cmp(NewValue(interExp)), checker.Equals, true)
+	c.Assert(byt.Bytes(), checker.DeepEquals, bytExp)
+	c.Assert(bigInt.BigInt(), checker.DeepEquals, bigExp)
+}
+
+func (s *ValueSuite) TestIterator(c *checker.C) {
+	value := NewValue([]interface{}{1, 2, 3})
+	iter := value.NewIterator()
+	values := []uint64{1, 2, 3}
+	i := 0
+	for iter.Next() {
+		c.Assert(values[i], checker.Equals, iter.Value().Uint())
+		i++
+	}
+}
+
+func (s *ValueSuite) TestMath(c *checker.C) {
+	data1 := NewValue(1)
+	data1.Add(1).Add(1)
+	exp1 := NewValue(3)
+	data2 := NewValue(2)
+	data2.Sub(1).Sub(1)
+	exp2 := NewValue(0)
+
+	c.Assert(data1.DeepCmp(exp1), checker.Equals, true)
+	c.Assert(data2.DeepCmp(exp2), checker.Equals, true)
+}
+
+func (s *ValueSuite) TestString(c *checker.C) {
+	data := "10"
+	exp := int64(10)
+	c.Assert(NewValue(data).Int(), checker.DeepEquals, exp)
+}
diff --git a/event/event.go b/event/event.go
new file mode 100644
index 0000000000000000000000000000000000000000..540fbba65a49639641cc6cfbc7ea67bab1be29ae
--- /dev/null
+++ b/event/event.go
@@ -0,0 +1,183 @@
+// Package event implements an event multiplexer.
+package event
+
+import (
+	"errors"
+	"fmt"
+	"reflect"
+	"sync"
+)
+
+// Subscription is implemented by event subscriptions.
+type Subscription interface {
+	// Chan returns a channel that carries events.
+	// Implementations should return the same channel
+	// for any subsequent calls to Chan.
+	Chan() <-chan interface{}
+
+	// Unsubscribe stops delivery of events to a subscription.
+	// The event channel is closed.
+	// Unsubscribe can be called more than once.
+	Unsubscribe()
+}
+
+// A TypeMux dispatches events to registered receivers. Receivers can be
+// registered to handle events of certain type. Any operation
+// called after mux is stopped will return ErrMuxClosed.
+//
+// The zero value is ready to use.
+type TypeMux struct {
+	mutex   sync.RWMutex
+	subm    map[reflect.Type][]*muxsub
+	stopped bool
+}
+
+// ErrMuxClosed is returned when Posting on a closed TypeMux.
+var ErrMuxClosed = errors.New("event: mux closed")
+
+// Subscribe creates a subscription for events of the given types. The
+// subscription's channel is closed when it is unsubscribed
+// or the mux is closed.
+func (mux *TypeMux) Subscribe(types ...interface{}) Subscription {
+	sub := newsub(mux)
+	mux.mutex.Lock()
+	defer mux.mutex.Unlock()
+	if mux.stopped {
+		close(sub.postC)
+	} else {
+		if mux.subm == nil {
+			mux.subm = make(map[reflect.Type][]*muxsub)
+		}
+		for _, t := range types {
+			rtyp := reflect.TypeOf(t)
+			oldsubs := mux.subm[rtyp]
+			if find(oldsubs, sub) != -1 {
+				panic(fmt.Sprintf("event: duplicate type %s in Subscribe", rtyp))
+			}
+			subs := make([]*muxsub, len(oldsubs)+1)
+			copy(subs, oldsubs)
+			subs[len(oldsubs)] = sub
+			mux.subm[rtyp] = subs
+		}
+	}
+	return sub
+}
+
+// Post sends an event to all receivers registered for the given type.
+// It returns ErrMuxClosed if the mux has been stopped.
+func (mux *TypeMux) Post(ev interface{}) error {
+	rtyp := reflect.TypeOf(ev)
+	mux.mutex.RLock()
+	if mux.stopped {
+		mux.mutex.RUnlock()
+		return ErrMuxClosed
+	}
+	subs := mux.subm[rtyp]
+	mux.mutex.RUnlock()
+	for _, sub := range subs {
+		sub.deliver(ev)
+	}
+	return nil
+}
+
+// Stop closes a mux. The mux can no longer be used.
+// Future Post calls will fail with ErrMuxClosed.
+// Stop blocks until all current deliveries have finished.
+func (mux *TypeMux) Stop() {
+	mux.mutex.Lock()
+	for _, subs := range mux.subm {
+		for _, sub := range subs {
+			sub.closewait()
+		}
+	}
+	mux.subm = nil
+	mux.stopped = true
+	mux.mutex.Unlock()
+}
+
+func (mux *TypeMux) del(s *muxsub) {
+	mux.mutex.Lock()
+	for typ, subs := range mux.subm {
+		if pos := find(subs, s); pos >= 0 {
+			if len(subs) == 1 {
+				delete(mux.subm, typ)
+			} else {
+				mux.subm[typ] = posdelete(subs, pos)
+			}
+		}
+	}
+	s.mux.mutex.Unlock()
+}
+
+func find(slice []*muxsub, item *muxsub) int {
+	for i, v := range slice {
+		if v == item {
+			return i
+		}
+	}
+	return -1
+}
+
+func posdelete(slice []*muxsub, pos int) []*muxsub {
+	news := make([]*muxsub, len(slice)-1)
+	copy(news[:pos], slice[:pos])
+	copy(news[pos:], slice[pos+1:])
+	return news
+}
+
+type muxsub struct {
+	mux     *TypeMux
+	closeMu sync.Mutex
+	closing chan struct{}
+	closed  bool
+
+	// these two are the same channel. they are stored separately so
+	// postC can be set to nil without affecting the return value of
+	// Chan.
+	postMu sync.RWMutex
+	readC  <-chan interface{}
+	postC  chan<- interface{}
+}
+
+func newsub(mux *TypeMux) *muxsub {
+	c := make(chan interface{})
+	return &muxsub{
+		mux:     mux,
+		readC:   c,
+		postC:   c,
+		closing: make(chan struct{}),
+	}
+}
+
+func (s *muxsub) Chan() <-chan interface{} {
+	return s.readC
+}
+
+func (s *muxsub) Unsubscribe() {
+	s.mux.del(s)
+	s.closewait()
+}
+
+func (s *muxsub) closewait() {
+	s.closeMu.Lock()
+	defer s.closeMu.Unlock()
+	if s.closed {
+		return
+	}
+	close(s.closing)
+	s.closed = true
+
+	s.postMu.Lock()
+	close(s.postC)
+	s.postC = nil
+	s.postMu.Unlock()
+}
+
+func (s *muxsub) deliver(ev interface{}) {
+	s.postMu.RLock()
+	select {
+	case s.postC <- ev:
+	case <-s.closing:
+	}
+	s.postMu.RUnlock()
+}
diff --git a/event/event_test.go b/event/event_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c7c0266c1a798033405a2001804907594e57373a
--- /dev/null
+++ b/event/event_test.go
@@ -0,0 +1,176 @@
+package event
+
+import (
+	"math/rand"
+	"sync"
+	"testing"
+	"time"
+)
+
+type testEvent int
+
+func TestSub(t *testing.T) {
+	mux := new(TypeMux)
+	defer mux.Stop()
+
+	sub := mux.Subscribe(testEvent(0))
+	go func() {
+		if err := mux.Post(testEvent(5)); err != nil {
+			t.Errorf("Post returned unexpected error: %v", err)
+		}
+	}()
+	ev := <-sub.Chan()
+
+	if ev.(testEvent) != testEvent(5) {
+		t.Errorf("Got %v (%T), expected event %v (%T)",
+			ev, ev, testEvent(5), testEvent(5))
+	}
+}
+
+func TestMuxErrorAfterStop(t *testing.T) {
+	mux := new(TypeMux)
+	mux.Stop()
+
+	sub := mux.Subscribe(testEvent(0))
+	if _, isopen := <-sub.Chan(); isopen {
+		t.Errorf("subscription channel was not closed")
+	}
+	if err := mux.Post(testEvent(0)); err != ErrMuxClosed {
+		t.Errorf("Post error mismatch, got: %s, expected: %s", err, ErrMuxClosed)
+	}
+}
+
+func TestUnsubscribeUnblockPost(t *testing.T) {
+	mux := new(TypeMux)
+	defer mux.Stop()
+
+	sub := mux.Subscribe(testEvent(0))
+	unblocked := make(chan bool)
+	go func() {
+		mux.Post(testEvent(5))
+		unblocked <- true
+	}()
+
+	select {
+	case <-unblocked:
+		t.Errorf("Post returned before Unsubscribe")
+	default:
+		sub.Unsubscribe()
+		<-unblocked
+	}
+}
+
+func TestSubscribeDuplicateType(t *testing.T) {
+	mux := new(TypeMux)
+	expected := "event: duplicate type event.testEvent in Subscribe"
+
+	defer func() {
+		err := recover()
+		if err == nil {
+			t.Errorf("Subscribe didn't panic for duplicate type")
+		} else if err != expected {
+			t.Errorf("panic mismatch: got %#v, expected %#v", err, expected)
+		}
+	}()
+	mux.Subscribe(testEvent(1), testEvent(2))
+}
+
+func TestMuxConcurrent(t *testing.T) {
+	rand.Seed(time.Now().Unix())
+	mux := new(TypeMux)
+	defer mux.Stop()
+
+	recv := make(chan int)
+	poster := func() {
+		for {
+			err := mux.Post(testEvent(0))
+			if err != nil {
+				return
+			}
+		}
+	}
+	sub := func(i int) {
+		time.Sleep(time.Duration(rand.Intn(99)) * time.Millisecond)
+		sub := mux.Subscribe(testEvent(0))
+		<-sub.Chan()
+		sub.Unsubscribe()
+		recv <- i
+	}
+
+	go poster()
+	go poster()
+	go poster()
+	nsubs := 1000
+	for i := 0; i < nsubs; i++ {
+		go sub(i)
+	}
+
+	// wait until everyone has been served
+	counts := make(map[int]int, nsubs)
+	for i := 0; i < nsubs; i++ {
+		counts[<-recv]++
+	}
+	for i, count := range counts {
+		if count != 1 {
+			t.Errorf("receiver %d called %d times, expected only 1 call", i, count)
+		}
+	}
+}
+
+func emptySubscriber(mux *TypeMux, types ...interface{}) {
+	s := mux.Subscribe(testEvent(0))
+	go func() {
+		for _ = range s.Chan() {
+		}
+	}()
+}
+
+func BenchmarkPost3(b *testing.B) {
+	var mux = new(TypeMux)
+	defer mux.Stop()
+	emptySubscriber(mux, testEvent(0))
+	emptySubscriber(mux, testEvent(0))
+	emptySubscriber(mux, testEvent(0))
+
+	for i := 0; i < b.N; i++ {
+		mux.Post(testEvent(0))
+	}
+}
+
+func BenchmarkPostConcurrent(b *testing.B) {
+	var mux = new(TypeMux)
+	defer mux.Stop()
+	emptySubscriber(mux, testEvent(0))
+	emptySubscriber(mux, testEvent(0))
+	emptySubscriber(mux, testEvent(0))
+
+	var wg sync.WaitGroup
+	poster := func() {
+		for i := 0; i < b.N; i++ {
+			mux.Post(testEvent(0))
+		}
+		wg.Done()
+	}
+	wg.Add(5)
+	for i := 0; i < 5; i++ {
+		go poster()
+	}
+	wg.Wait()
+}
+
+// for comparison
+func BenchmarkChanSend(b *testing.B) {
+	c := make(chan interface{})
+	closed := make(chan struct{})
+	go func() {
+		for _ = range c {
+		}
+	}()
+
+	for i := 0; i < b.N; i++ {
+		select {
+		case c <- i:
+		case <-closed:
+		}
+	}
+}
diff --git a/event/example_test.go b/event/example_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..2f47f6f27e4778c2d9f1ace06fcc1615429a9068
--- /dev/null
+++ b/event/example_test.go
@@ -0,0 +1,42 @@
+package event
+
+import "fmt"
+
+func ExampleTypeMux() {
+	type someEvent struct{ I int }
+	type otherEvent struct{ S string }
+	type yetAnotherEvent struct{ X, Y int }
+
+	var mux TypeMux
+
+	// Start a subscriber.
+	done := make(chan struct{})
+	sub := mux.Subscribe(someEvent{}, otherEvent{})
+	go func() {
+		for event := range sub.Chan() {
+			fmt.Printf("Received: %#v\n", event)
+		}
+		fmt.Println("done")
+		close(done)
+	}()
+
+	// Post some events.
+	mux.Post(someEvent{5})
+	mux.Post(yetAnotherEvent{X: 3, Y: 4})
+	mux.Post(someEvent{6})
+	mux.Post(otherEvent{"whoa"})
+
+	// Stop closes all subscription channels.
+	// The subscriber goroutine will print "done"
+	// and exit.
+	mux.Stop()
+
+	// Wait for subscriber to return.
+	<-done
+
+	// Output:
+	// Received: event.someEvent{I:5}
+	// Received: event.someEvent{I:6}
+	// Received: event.otherEvent{S:"whoa"}
+	// done
+}
diff --git a/event/filter/filter.go b/event/filter/filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..9817d5782fadb58c9566570d5024e0099fefa1ec
--- /dev/null
+++ b/event/filter/filter.go
@@ -0,0 +1,70 @@
+package filter
+
+import "reflect"
+
+type Filter interface {
+	Compare(Filter) bool
+	Trigger(data interface{})
+}
+
+type FilterEvent struct {
+	filter Filter
+	data   interface{}
+}
+
+type Filters struct {
+	id       int
+	watchers map[int]Filter
+	ch       chan FilterEvent
+
+	quit chan struct{}
+}
+
+func New() *Filters {
+	return &Filters{
+		ch:       make(chan FilterEvent),
+		watchers: make(map[int]Filter),
+		quit:     make(chan struct{}),
+	}
+}
+
+func (self *Filters) Start() {
+	go self.loop()
+}
+
+func (self *Filters) Stop() {
+	close(self.quit)
+}
+
+func (self *Filters) Notify(filter Filter, data interface{}) {
+	self.ch <- FilterEvent{filter, data}
+}
+
+func (self *Filters) Install(watcher Filter) int {
+	self.watchers[self.id] = watcher
+	self.id++
+
+	return self.id - 1
+}
+
+func (self *Filters) Uninstall(id int) {
+	delete(self.watchers, id)
+}
+
+func (self *Filters) loop() {
+out:
+	for {
+		select {
+		case <-self.quit:
+			break out
+		case event := <-self.ch:
+			for _, watcher := range self.watchers {
+				if reflect.TypeOf(watcher) == reflect.TypeOf(event.filter) {
+					if watcher.Compare(event.filter) {
+						watcher.Trigger(event.data)
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/event/filter/filter_test.go b/event/filter/filter_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..815deb63af1934ddc29f80db464249e2cc4078c8
--- /dev/null
+++ b/event/filter/filter_test.go
@@ -0,0 +1,34 @@
+package filter
+
+import "testing"
+
+func TestFilters(t *testing.T) {
+	var success bool
+	var failure bool
+
+	fm := New()
+	fm.Start()
+	fm.Install(Generic{
+		Str1: "hello",
+		Fn: func(data interface{}) {
+			success = data.(bool)
+		},
+	})
+	fm.Install(Generic{
+		Str1: "hello1",
+		Str2: "hello",
+		Fn: func(data interface{}) {
+			failure = true
+		},
+	})
+	fm.Notify(Generic{Str1: "hello"}, true)
+	fm.Stop()
+
+	if !success {
+		t.Error("expected 'hello' to be posted")
+	}
+
+	if failure {
+		t.Error("hello1 was triggered")
+	}
+}
diff --git a/event/filter/generic_filter.go b/event/filter/generic_filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..b04b4801e773a10059a936dc88defed48658b920
--- /dev/null
+++ b/event/filter/generic_filter.go
@@ -0,0 +1,22 @@
+package filter
+
+type Generic struct {
+	Str1, Str2, Str3 string
+
+	Fn func(data interface{})
+}
+
+func (self Generic) Compare(f Filter) bool {
+	filter := f.(Generic)
+	if (len(self.Str1) == 0 || filter.Str1 == self.Str1) &&
+		(len(self.Str2) == 0 || filter.Str2 == self.Str2) &&
+		(len(self.Str3) == 0 || filter.Str3 == self.Str3) {
+		return true
+	}
+
+	return false
+}
+
+func (self Generic) Trigger(data interface{}) {
+	self.Fn(data)
+}
diff --git a/events.go b/events.go
new file mode 100644
index 0000000000000000000000000000000000000000..5fff1d8314e6322b3ebedb0af18a4a1b971e8003
--- /dev/null
+++ b/events.go
@@ -0,0 +1,11 @@
+package eth
+
+import "container/list"
+
+type PeerListEvent struct {
+	Peers *list.List
+}
+
+type ChainSyncEvent struct {
+	InSync bool
+}
diff --git a/gocoverage.sh b/gocoverage.sh
new file mode 100755
index 0000000000000000000000000000000000000000..35038108b943305b42bffb95b68aa9c68b3b32ba
--- /dev/null
+++ b/gocoverage.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+# The script does automatic checking on a Go package and its sub-packages, including:
+# 6. test coverage (http://blog.golang.org/cover)
+
+set -e
+
+# Run test coverage on each subdirectories and merge the coverage profile.
+
+echo "mode: count" > profile.cov
+
+# Standard go tooling behavior is to ignore dirs with leading underscors
+for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);
+do
+if ls $dir/*.go &> /dev/null; then
+    # echo $dir
+    go test -covermode=count -coverprofile=$dir/profile.tmp $dir
+    if [ -f $dir/profile.tmp ]
+    then
+        cat $dir/profile.tmp | tail -n +2 >> profile.cov
+        rm $dir/profile.tmp
+    fi
+fi
+done
+
+go tool cover -func profile.cov
+
+# To submit the test coverage result to coveralls.io,
+# use goveralls (https://github.com/mattn/goveralls)
+# goveralls -coverprofile=profile.cov -service=travis-ci
diff --git a/install.sh b/install.sh
index 9719a1afcbf7c369dadc2228e714a34f3a9698dd..30a3802e4e12b7b99ea829dae4378dd933aba9cc 100755
--- a/install.sh
+++ b/install.sh
@@ -1,15 +1,20 @@
 #!/bin/sh
 
 if [ "$1" == "" ]; then
-	echo "Usage $0 executable branch ethereum develop"
-	echo "executable    ethereum or ethereal"
-	echo "branch        develop or master"
+	echo "Usage $0 executable branch"
+	echo "executable    ethereum | mist"
+	echo "branch        develop | master"
 	exit
 fi
 
 exe=$1
+path=$exe
 branch=$2
 
+if [ "$branch" == "develop" ]; then
+	path="cmd/$exe"
+fi
+
 # Test if go is installed
 command -v go >/dev/null 2>&1 || { echo >&2 "Unable to find 'go'. This script requires go."; exit 1; }
 
@@ -19,39 +24,30 @@ if [ "$GOPATH" == "" ]; then
 	exit
 fi
 
-echo "go get -u -d github.com/ethereum/go-ethereum/$exe"
-go get -v -u -d github.com/ethereum/go-ethereum/$exe
-if [ $? != 0 ]; then
-	echo "go get failed"
-	exit
-fi
+echo "changing branch to $branch"
+cd $GOPATH/src/github.com/ethereum/go-ethereum
+git checkout $branch
 
-echo "serpent-go"
-cd $GOPATH/src/github.com/obscuren/serpent-go
+# installing package dependencies doesn't work for develop
+# branch as go get always pulls from master head
+# so build will continue to fail, but this installs locally
+# for people who git clone since go install will manage deps
 
-echo "init submodule"
-git submodule init
-git submodule update
+#echo "go get -u -d github.com/ethereum/go-ethereum/$path"
+#go get -v -u -d github.com/ethereum/go-ethereum/$path
+#if [ $? != 0 ]; then
+#	echo "go get failed"
+#	exit
+#fi
 
-echo "eth-go"
-cd $GOPATH/src/github.com/ethereum/eth-go
-git checkout $branch
+cd $GOPATH/src/github.com/ethereum/go-ethereum/$path
 
-echo "go-ethereum"
-cd $GOPATH/src/github.com/ethereum/go-ethereum/$exe
-git checkout $branch
-
-if [ "$exe" == "ethereal" ]; then
-	echo "Building ethereal GUI. Assuming Qt is installed. If this step"
+if [ "$exe" == "mist" ]; then
+	echo "Building Mist GUI. Assuming Qt is installed. If this step"
 	echo "fails; please refer to: https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum(Go)"
 else
 	echo "Building ethereum CLI."
 fi
 
 go install
-if [ $? == 0 ]; then
-	echo "go install failed"
-	exit
-fi
-
 echo "done. Please run $exe :-)"
diff --git a/install_deps.sh b/install_deps.sh
new file mode 100755
index 0000000000000000000000000000000000000000..73a31332448304ec124f3a4c9d2f3e28eec61077
--- /dev/null
+++ b/install_deps.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+set -e
+
+TEST_DEPS=$(go list -f '{{.Imports}} {{.TestImports}} {{.XTestImports}}' github.com/ethereum/go-ethereum/... | sed -e 's/\[//g' | sed -e 's/\]//g' | sed -e 's/C //g')
+if [ "$TEST_DEPS" ]; then
+  go get -race $TEST_DEPS
+fi
diff --git a/javascript/javascript_runtime.go b/javascript/javascript_runtime.go
index ffc672a63a41cf08ce38ad10e3261e2e4f8a41ad..a26f0154e7d26df73a34ac23ff02ccefd79b0b70 100644
--- a/javascript/javascript_runtime.go
+++ b/javascript/javascript_runtime.go
@@ -7,27 +7,26 @@ import (
 	"path"
 	"path/filepath"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethreact"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
-	"github.com/ethereum/go-ethereum/utils"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/cmd/utils"
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/xeth"
 	"github.com/obscuren/otto"
 )
 
-var jsrelogger = ethlog.NewLogger("JSRE")
+var jsrelogger = logger.NewLogger("JSRE")
 
 type JSRE struct {
 	ethereum *eth.Ethereum
 	Vm       *otto.Otto
-	pipe     *ethpipe.JSPipe
+	pipe     *xeth.JSXEth
 
-	blockChan  chan ethreact.Event
-	changeChan chan ethreact.Event
-	quitChan   chan bool
+	events event.Subscription
 
 	objectCb map[string][]otto.Value
 }
@@ -42,7 +41,7 @@ func (jsre *JSRE) LoadExtFile(path string) {
 }
 
 func (jsre *JSRE) LoadIntFile(file string) {
-	assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "mist", "assets", "ext")
+	assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist", "assets", "ext")
 	jsre.LoadExtFile(path.Join(assetPath, file))
 }
 
@@ -50,10 +49,8 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
 	re := &JSRE{
 		ethereum,
 		otto.New(),
-		ethpipe.NewJSPipe(ethereum),
-		make(chan ethreact.Event, 10),
-		make(chan ethreact.Event, 10),
-		make(chan bool),
+		xeth.NewJSXEth(ethereum),
+		nil,
 		make(map[string][]otto.Value),
 	}
 
@@ -64,13 +61,13 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
 	re.LoadIntFile("string.js")
 	re.LoadIntFile("big.js")
 
+	// Subscribe to events
+	mux := ethereum.EventMux()
+	re.events = mux.Subscribe(core.NewBlockEvent{})
+
 	// We have to make sure that, whoever calls this, calls "Stop"
 	go re.mainLoop()
 
-	// Subscribe to events
-	reactor := ethereum.Reactor()
-	reactor.Subscribe("newBlock", re.blockChan)
-
 	re.Bind("eth", &JSEthereum{re.pipe, re.Vm, ethereum})
 
 	re.initStdFuncs()
@@ -105,25 +102,12 @@ func (self *JSRE) Require(file string) error {
 }
 
 func (self *JSRE) Stop() {
-	// Kill the main loop
-	self.quitChan <- true
-
-	close(self.blockChan)
-	close(self.quitChan)
-	close(self.changeChan)
+	self.events.Unsubscribe()
 	jsrelogger.Infoln("stopped")
 }
 
 func (self *JSRE) mainLoop() {
-out:
-	for {
-		select {
-		case <-self.quitChan:
-			break out
-		case block := <-self.blockChan:
-			if _, ok := block.Resource.(*ethchain.Block); ok {
-			}
-		}
+	for _ = range self.events.Chan() {
 	}
 }
 
@@ -137,6 +121,7 @@ func (self *JSRE) initStdFuncs() {
 	eth.Set("startMining", self.startMining)
 	eth.Set("execBlock", self.execBlock)
 	eth.Set("dump", self.dump)
+	eth.Set("export", self.export)
 }
 
 /*
@@ -144,16 +129,16 @@ func (self *JSRE) initStdFuncs() {
  */
 
 func (self *JSRE) dump(call otto.FunctionCall) otto.Value {
-	var state *ethstate.State
+	var state *state.StateDB
 
 	if len(call.ArgumentList) > 0 {
-		var block *ethchain.Block
+		var block *types.Block
 		if call.Argument(0).IsNumber() {
 			num, _ := call.Argument(0).ToInteger()
-			block = self.ethereum.BlockChain().GetBlockByNumber(uint64(num))
+			block = self.ethereum.ChainManager().GetBlockByNumber(uint64(num))
 		} else if call.Argument(0).IsString() {
 			hash, _ := call.Argument(0).ToString()
-			block = self.ethereum.BlockChain().GetBlock(ethutil.Hex2Bytes(hash))
+			block = self.ethereum.ChainManager().GetBlock(ethutil.Hex2Bytes(hash))
 		} else {
 			fmt.Println("invalid argument for dump. Either hex string or number")
 		}
@@ -166,7 +151,7 @@ func (self *JSRE) dump(call otto.FunctionCall) otto.Value {
 
 		state = block.State()
 	} else {
-		state = self.ethereum.StateManager().CurrentState()
+		state = self.ethereum.ChainManager().State()
 	}
 
 	v, _ := self.Vm.ToValue(state.Dump())
@@ -201,13 +186,13 @@ func (self *JSRE) watch(call otto.FunctionCall) otto.Value {
 	if storageCallback {
 		self.objectCb[addr+storageAddr] = append(self.objectCb[addr+storageAddr], cb)
 
-		event := "storage:" + string(ethutil.Hex2Bytes(addr)) + ":" + string(ethutil.Hex2Bytes(storageAddr))
-		self.ethereum.Reactor().Subscribe(event, self.changeChan)
+		// event := "storage:" + string(ethutil.Hex2Bytes(addr)) + ":" + string(ethutil.Hex2Bytes(storageAddr))
+		// self.ethereum.EventMux().Subscribe(event, self.changeChan)
 	} else {
 		self.objectCb[addr] = append(self.objectCb[addr], cb)
 
-		event := "object:" + string(ethutil.Hex2Bytes(addr))
-		self.ethereum.Reactor().Subscribe(event, self.changeChan)
+		// event := "object:" + string(ethutil.Hex2Bytes(addr))
+		// self.ethereum.EventMux().Subscribe(event, self.changeChan)
 	}
 
 	return otto.UndefinedValue()
@@ -252,3 +237,20 @@ func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value {
 
 	return otto.TrueValue()
 }
+
+func (self *JSRE) export(call otto.FunctionCall) otto.Value {
+	fn, err := call.Argument(0).ToString()
+	if err != nil {
+		fmt.Println(err)
+		return otto.FalseValue()
+	}
+
+	data := self.ethereum.ChainManager().Export()
+
+	if err := ethutil.WriteFile(fn, data); err != nil {
+		fmt.Println(err)
+		return otto.FalseValue()
+	}
+
+	return otto.TrueValue()
+}
diff --git a/javascript/js_lib.go b/javascript/js_lib.go
index a3e9b8a5b0588c3064d6e0408ce1da6e7f8b47b2..dd1fe5f4d0b68334ce791b7cd07d855b32dc3eaf 100644
--- a/javascript/js_lib.go
+++ b/javascript/js_lib.go
@@ -44,9 +44,11 @@ function pp(object) {
 
 function prettyPrint(/* */) {
     var args = arguments;
+    var ret = "";
     for(var i = 0, l = args.length; i < l; i++) {
-	    console.log(pp(args[i]))
+	    ret += pp(args[i]) + "\n";
     }
+    return ret;
 }
 
 var print = prettyPrint;
diff --git a/javascript/types.go b/javascript/types.go
index 53a2977a820b3442f19a6a7f866dd9b2f02caab4..d5acaecce8ad34a8647f82fb314be9e8126944f6 100644
--- a/javascript/types.go
+++ b/javascript/types.go
@@ -3,16 +3,16 @@ package javascript
 import (
 	"fmt"
 
-	"github.com/ethereum/eth-go"
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/ui"
+	"github.com/ethereum/go-ethereum/xeth"
 	"github.com/obscuren/otto"
 )
 
 type JSStateObject struct {
-	*ethpipe.JSObject
+	*xeth.JSObject
 	eth *JSEthereum
 }
 
@@ -30,7 +30,7 @@ func (self *JSStateObject) EachStorage(call otto.FunctionCall) otto.Value {
 // The JSEthereum object attempts to wrap the PEthereum object and returns
 // meaningful javascript objects
 type JSBlock struct {
-	*ethpipe.JSBlock
+	*xeth.JSBlock
 	eth *JSEthereum
 }
 
@@ -51,7 +51,7 @@ type JSMessage struct {
 	Number    int32  `json:"number"`
 }
 
-func NewJSMessage(message *ethstate.Message) JSMessage {
+func NewJSMessage(message *state.Message) JSMessage {
 	return JSMessage{
 		To:        ethutil.Bytes2Hex(message.To),
 		From:      ethutil.Bytes2Hex(message.From),
@@ -67,33 +67,33 @@ func NewJSMessage(message *ethstate.Message) JSMessage {
 }
 
 type JSEthereum struct {
-	*ethpipe.JSPipe
+	*xeth.JSXEth
 	vm       *otto.Otto
 	ethereum *eth.Ethereum
 }
 
 func (self *JSEthereum) GetBlock(hash string) otto.Value {
-	return self.toVal(&JSBlock{self.JSPipe.BlockByHash(hash), self})
+	return self.toVal(&JSBlock{self.JSXEth.BlockByHash(hash), self})
 }
 
 func (self *JSEthereum) GetPeers() otto.Value {
-	return self.toVal(self.JSPipe.Peers())
+	return self.toVal(self.JSXEth.Peers())
 }
 
 func (self *JSEthereum) GetKey() otto.Value {
-	return self.toVal(self.JSPipe.Key())
+	return self.toVal(self.JSXEth.Key())
 }
 
 func (self *JSEthereum) GetStateObject(addr string) otto.Value {
-	return self.toVal(&JSStateObject{ethpipe.NewJSObject(self.JSPipe.World().SafeGet(ethutil.Hex2Bytes(addr))), self})
+	return self.toVal(&JSStateObject{xeth.NewJSObject(self.JSXEth.World().SafeGet(ethutil.Hex2Bytes(addr))), self})
 }
 
 func (self *JSEthereum) Peers() otto.Value {
-	return self.toVal(self.JSPipe.Peers())
+	return self.toVal(self.JSXEth.Peers())
 }
 
 func (self *JSEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) otto.Value {
-	r, err := self.JSPipe.Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr)
+	r, err := self.JSXEth.Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr)
 	if err != nil {
 		fmt.Println(err)
 
@@ -104,7 +104,7 @@ func (self *JSEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr,
 }
 
 func (self *JSEthereum) Create(key, valueStr, gasStr, gasPriceStr, scriptStr string) otto.Value {
-	r, err := self.JSPipe.Transact(key, "", valueStr, gasStr, gasPriceStr, scriptStr)
+	r, err := self.JSXEth.Transact(key, "", valueStr, gasStr, gasPriceStr, scriptStr)
 
 	if err != nil {
 		fmt.Println(err)
@@ -128,7 +128,7 @@ func (self *JSEthereum) toVal(v interface{}) otto.Value {
 }
 
 func (self *JSEthereum) Messages(object map[string]interface{}) otto.Value {
-	filter := ethchain.NewFilterFromMap(object, self.ethereum)
+	filter := ui.NewFilterFromMap(object, self.ethereum)
 
 	messages := filter.Find()
 	var msgs []JSMessage
diff --git a/logger/example_test.go b/logger/example_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c624252b8e40d89b5ed39e6e4c80ce500efe0264
--- /dev/null
+++ b/logger/example_test.go
@@ -0,0 +1,21 @@
+package logger
+
+import "os"
+
+func ExampleLogger() {
+	logger := NewLogger("TAG")
+	logger.Infoln("so awesome")            // prints [TAG] so awesome
+	logger.Infof("this %q is raw", "coin") // prints [TAG] this "coin" is raw
+}
+
+func ExampleLogSystem() {
+	filename := "test.log"
+	file, _ := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, os.ModePerm)
+	fileLog := NewStdLogSystem(file, 0, WarnLevel)
+	AddLogSystem(fileLog)
+
+	stdoutLog := NewStdLogSystem(os.Stdout, 0, WarnLevel)
+	AddLogSystem(stdoutLog)
+
+	NewLogger("TAG").Warnln("reactor meltdown") // writes to both logs
+}
diff --git a/logger/loggers.go b/logger/loggers.go
new file mode 100644
index 0000000000000000000000000000000000000000..1bf7bfa0e18a97ba5440acab0af4e655164a3881
--- /dev/null
+++ b/logger/loggers.go
@@ -0,0 +1,248 @@
+/*
+Package logger implements a multi-output leveled logger.
+
+Other packages use tagged logger to send log messages to shared
+(process-wide) logging engine. The shared logging engine dispatches to
+multiple log systems. The log level can be set separately per log
+system.
+
+Logging is asynchronous and does not block the caller. Message
+formatting is performed by the caller goroutine to avoid incorrect
+logging of mutable state.
+*/
+package logger
+
+import (
+	"fmt"
+	"io"
+	"log"
+	"os"
+	"sync"
+	"sync/atomic"
+)
+
+// LogSystem is implemented by log output devices.
+// All methods can be called concurrently from multiple goroutines.
+type LogSystem interface {
+	GetLogLevel() LogLevel
+	SetLogLevel(i LogLevel)
+	LogPrint(LogLevel, string)
+}
+
+type message struct {
+	level LogLevel
+	msg   string
+}
+
+type LogLevel uint8
+
+const (
+	// Standard log levels
+	Silence LogLevel = iota
+	ErrorLevel
+	WarnLevel
+	InfoLevel
+	DebugLevel
+	DebugDetailLevel
+)
+
+var (
+	logMessageC = make(chan message)
+	addSystemC  = make(chan LogSystem)
+	flushC      = make(chan chan struct{})
+	resetC      = make(chan chan struct{})
+)
+
+func init() {
+	go dispatchLoop()
+}
+
+// each system can buffer this many messages before
+// blocking incoming log messages.
+const sysBufferSize = 500
+
+func dispatchLoop() {
+	var (
+		systems  []LogSystem
+		systemIn []chan message
+		systemWG sync.WaitGroup
+	)
+	bootSystem := func(sys LogSystem) {
+		in := make(chan message, sysBufferSize)
+		systemIn = append(systemIn, in)
+		systemWG.Add(1)
+		go sysLoop(sys, in, &systemWG)
+	}
+
+	for {
+		select {
+		case msg := <-logMessageC:
+			for _, c := range systemIn {
+				c <- msg
+			}
+
+		case sys := <-addSystemC:
+			systems = append(systems, sys)
+			bootSystem(sys)
+
+		case waiter := <-resetC:
+			// reset means terminate all systems
+			for _, c := range systemIn {
+				close(c)
+			}
+			systems = nil
+			systemIn = nil
+			systemWG.Wait()
+			close(waiter)
+
+		case waiter := <-flushC:
+			// flush means reboot all systems
+			for _, c := range systemIn {
+				close(c)
+			}
+			systemIn = nil
+			systemWG.Wait()
+			for _, sys := range systems {
+				bootSystem(sys)
+			}
+			close(waiter)
+		}
+	}
+}
+
+func sysLoop(sys LogSystem, in <-chan message, wg *sync.WaitGroup) {
+	for msg := range in {
+		if sys.GetLogLevel() >= msg.level {
+			sys.LogPrint(msg.level, msg.msg)
+		}
+	}
+	wg.Done()
+}
+
+// Reset removes all active log systems.
+// It blocks until all current messages have been delivered.
+func Reset() {
+	waiter := make(chan struct{})
+	resetC <- waiter
+	<-waiter
+}
+
+// Flush waits until all current log messages have been dispatched to
+// the active log systems.
+func Flush() {
+	waiter := make(chan struct{})
+	flushC <- waiter
+	<-waiter
+}
+
+// AddLogSystem starts printing messages to the given LogSystem.
+func AddLogSystem(sys LogSystem) {
+	addSystemC <- sys
+}
+
+// A Logger prints messages prefixed by a given tag. It provides named
+// Printf and Println style methods for all loglevels. Each ethereum
+// component should have its own logger with a unique prefix.
+type Logger struct {
+	tag string
+}
+
+func NewLogger(tag string) *Logger {
+	return &Logger{"[" + tag + "] "}
+}
+
+func (logger *Logger) sendln(level LogLevel, v ...interface{}) {
+	logMessageC <- message{level, logger.tag + fmt.Sprintln(v...)}
+}
+
+func (logger *Logger) sendf(level LogLevel, format string, v ...interface{}) {
+	logMessageC <- message{level, logger.tag + fmt.Sprintf(format, v...)}
+}
+
+// Errorln writes a message with ErrorLevel.
+func (logger *Logger) Errorln(v ...interface{}) {
+	logger.sendln(ErrorLevel, v...)
+}
+
+// Warnln writes a message with WarnLevel.
+func (logger *Logger) Warnln(v ...interface{}) {
+	logger.sendln(WarnLevel, v...)
+}
+
+// Infoln writes a message with InfoLevel.
+func (logger *Logger) Infoln(v ...interface{}) {
+	logger.sendln(InfoLevel, v...)
+}
+
+// Debugln writes a message with DebugLevel.
+func (logger *Logger) Debugln(v ...interface{}) {
+	logger.sendln(DebugLevel, v...)
+}
+
+// DebugDetailln writes a message with DebugDetailLevel.
+func (logger *Logger) DebugDetailln(v ...interface{}) {
+	logger.sendln(DebugDetailLevel, v...)
+}
+
+// Errorf writes a message with ErrorLevel.
+func (logger *Logger) Errorf(format string, v ...interface{}) {
+	logger.sendf(ErrorLevel, format, v...)
+}
+
+// Warnf writes a message with WarnLevel.
+func (logger *Logger) Warnf(format string, v ...interface{}) {
+	logger.sendf(WarnLevel, format, v...)
+}
+
+// Infof writes a message with InfoLevel.
+func (logger *Logger) Infof(format string, v ...interface{}) {
+	logger.sendf(InfoLevel, format, v...)
+}
+
+// Debugf writes a message with DebugLevel.
+func (logger *Logger) Debugf(format string, v ...interface{}) {
+	logger.sendf(DebugLevel, format, v...)
+}
+
+// DebugDetailf writes a message with DebugDetailLevel.
+func (logger *Logger) DebugDetailf(format string, v ...interface{}) {
+	logger.sendf(DebugDetailLevel, format, v...)
+}
+
+// Fatalln writes a message with ErrorLevel and exits the program.
+func (logger *Logger) Fatalln(v ...interface{}) {
+	logger.sendln(ErrorLevel, v...)
+	Flush()
+	os.Exit(0)
+}
+
+// Fatalf writes a message with ErrorLevel and exits the program.
+func (logger *Logger) Fatalf(format string, v ...interface{}) {
+	logger.sendf(ErrorLevel, format, v...)
+	Flush()
+	os.Exit(0)
+}
+
+// NewStdLogSystem creates a LogSystem that prints to the given writer.
+// The flag values are defined package log.
+func NewStdLogSystem(writer io.Writer, flags int, level LogLevel) LogSystem {
+	logger := log.New(writer, "", flags)
+	return &stdLogSystem{logger, uint32(level)}
+}
+
+type stdLogSystem struct {
+	logger *log.Logger
+	level  uint32
+}
+
+func (t *stdLogSystem) LogPrint(level LogLevel, msg string) {
+	t.logger.Print(msg)
+}
+
+func (t *stdLogSystem) SetLogLevel(i LogLevel) {
+	atomic.StoreUint32(&t.level, uint32(i))
+}
+
+func (t *stdLogSystem) GetLogLevel() LogLevel {
+	return LogLevel(atomic.LoadUint32(&t.level))
+}
diff --git a/logger/loggers_test.go b/logger/loggers_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..adc4df01634741ae40024291bb9d51ab51edbca9
--- /dev/null
+++ b/logger/loggers_test.go
@@ -0,0 +1,174 @@
+package logger
+
+import (
+	"io/ioutil"
+	"math/rand"
+	"os"
+	"sync"
+	"testing"
+	"time"
+)
+
+type TestLogSystem struct {
+	mutex  sync.Mutex
+	output string
+	level  LogLevel
+}
+
+func (ls *TestLogSystem) LogPrint(level LogLevel, msg string) {
+	ls.mutex.Lock()
+	ls.output += msg
+	ls.mutex.Unlock()
+}
+
+func (ls *TestLogSystem) SetLogLevel(i LogLevel) {
+	ls.mutex.Lock()
+	ls.level = i
+	ls.mutex.Unlock()
+}
+
+func (ls *TestLogSystem) GetLogLevel() LogLevel {
+	ls.mutex.Lock()
+	defer ls.mutex.Unlock()
+	return ls.level
+}
+
+func (ls *TestLogSystem) CheckOutput(t *testing.T, expected string) {
+	ls.mutex.Lock()
+	output := ls.output
+	ls.mutex.Unlock()
+	if output != expected {
+		t.Errorf("log output mismatch:\n   got: %q\n  want: %q\n", output, expected)
+	}
+}
+
+type blockedLogSystem struct {
+	LogSystem
+	unblock chan struct{}
+}
+
+func (ls blockedLogSystem) LogPrint(level LogLevel, msg string) {
+	<-ls.unblock
+	ls.LogSystem.LogPrint(level, msg)
+}
+
+func TestLoggerFlush(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	ls := blockedLogSystem{&TestLogSystem{level: WarnLevel}, make(chan struct{})}
+	AddLogSystem(ls)
+	for i := 0; i < 5; i++ {
+		// these writes shouldn't hang even though ls is blocked
+		logger.Errorf(".")
+	}
+
+	beforeFlush := time.Now()
+	time.AfterFunc(80*time.Millisecond, func() { close(ls.unblock) })
+	Flush() // this should hang for approx. 80ms
+	if blockd := time.Now().Sub(beforeFlush); blockd < 80*time.Millisecond {
+		t.Errorf("Flush didn't block long enough, blocked for %v, should've been >= 80ms", blockd)
+	}
+
+	ls.LogSystem.(*TestLogSystem).CheckOutput(t, "[TEST] .[TEST] .[TEST] .[TEST] .[TEST] .")
+}
+
+func TestLoggerPrintln(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	testLogSystem := &TestLogSystem{level: WarnLevel}
+	AddLogSystem(testLogSystem)
+	logger.Errorln("error")
+	logger.Warnln("warn")
+	logger.Infoln("info")
+	logger.Debugln("debug")
+	Flush()
+
+	testLogSystem.CheckOutput(t, "[TEST] error\n[TEST] warn\n")
+}
+
+func TestLoggerPrintf(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	testLogSystem := &TestLogSystem{level: WarnLevel}
+	AddLogSystem(testLogSystem)
+	logger.Errorf("error to %v\n", []int{1, 2, 3})
+	logger.Warnf("warn %%d %d", 5)
+	logger.Infof("info")
+	logger.Debugf("debug")
+	Flush()
+	testLogSystem.CheckOutput(t, "[TEST] error to [1 2 3]\n[TEST] warn %d 5")
+}
+
+func TestMultipleLogSystems(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	testLogSystem0 := &TestLogSystem{level: ErrorLevel}
+	testLogSystem1 := &TestLogSystem{level: WarnLevel}
+	AddLogSystem(testLogSystem0)
+	AddLogSystem(testLogSystem1)
+	logger.Errorln("error")
+	logger.Warnln("warn")
+	Flush()
+
+	testLogSystem0.CheckOutput(t, "[TEST] error\n")
+	testLogSystem1.CheckOutput(t, "[TEST] error\n[TEST] warn\n")
+}
+
+func TestFileLogSystem(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	filename := "test.log"
+	file, _ := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, os.ModePerm)
+	testLogSystem := NewStdLogSystem(file, 0, WarnLevel)
+	AddLogSystem(testLogSystem)
+	logger.Errorf("error to %s\n", filename)
+	logger.Warnln("warn")
+	Flush()
+	contents, _ := ioutil.ReadFile(filename)
+	output := string(contents)
+	if output != "[TEST] error to test.log\n[TEST] warn\n" {
+		t.Error("Expected contents of file 'test.log': '[TEST] error to test.log\\n[TEST] warn\\n', got ", output)
+	} else {
+		os.Remove(filename)
+	}
+}
+
+func TestNoLogSystem(t *testing.T) {
+	Reset()
+
+	logger := NewLogger("TEST")
+	logger.Warnln("warn")
+	Flush()
+}
+
+func TestConcurrentAddSystem(t *testing.T) {
+	rand.Seed(time.Now().Unix())
+	Reset()
+
+	logger := NewLogger("TEST")
+	stop := make(chan struct{})
+	writer := func() {
+		select {
+		case <-stop:
+			return
+		default:
+			logger.Infoln("foo")
+			Flush()
+		}
+	}
+
+	go writer()
+	go writer()
+
+	stopTime := time.Now().Add(100 * time.Millisecond)
+	for time.Now().Before(stopTime) {
+		time.Sleep(time.Duration(rand.Intn(20)) * time.Millisecond)
+		AddLogSystem(NewStdLogSystem(ioutil.Discard, 0, InfoLevel))
+	}
+	close(stop)
+}
diff --git a/miner/miner.go b/miner/miner.go
new file mode 100644
index 0000000000000000000000000000000000000000..f63096b634b8eeb0940b666f867ebae78d0e095a
--- /dev/null
+++ b/miner/miner.go
@@ -0,0 +1,261 @@
+/*
+	This file is part of go-ethereum
+
+	go-ethereum is free software: you can redistribute it and/or modify
+	it under the terms of the GNU Lesser General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	go-ethereum is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU Lesser General Public License
+	along with go-ethereum.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * @authors
+ * 	Jeffrey Wilcke <i@jev.io>
+ * @date 2014
+ *
+ */
+
+package miner
+
+import (
+	"math/big"
+	"sort"
+
+	"github.com/ethereum/go-ethereum"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/pow"
+	"github.com/ethereum/go-ethereum/pow/ezp"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+type LocalTx struct {
+	To       []byte `json:"to"`
+	Data     []byte `json:"data"`
+	Gas      string `json:"gas"`
+	GasPrice string `json:"gasPrice"`
+	Value    string `json:"value"`
+}
+
+func (self *LocalTx) Sign(key []byte) *types.Transaction {
+	return nil
+}
+
+var minerlogger = logger.NewLogger("MINER")
+
+type Miner struct {
+	eth    *eth.Ethereum
+	events event.Subscription
+
+	uncles    types.Blocks
+	localTxs  map[int]*LocalTx
+	localTxId int
+
+	pow       pow.PoW
+	quitCh    chan struct{}
+	powQuitCh chan struct{}
+
+	Coinbase []byte
+
+	mining bool
+
+	MinAcceptedGasPrice *big.Int
+}
+
+func New(coinbase []byte, eth *eth.Ethereum) *Miner {
+	return &Miner{
+		eth:                 eth,
+		powQuitCh:           make(chan struct{}),
+		pow:                 ezp.New(),
+		mining:              false,
+		localTxs:            make(map[int]*LocalTx),
+		MinAcceptedGasPrice: big.NewInt(10000000000000),
+		Coinbase:            coinbase,
+	}
+}
+
+func (self *Miner) GetPow() pow.PoW {
+	return self.pow
+}
+
+func (self *Miner) AddLocalTx(tx *LocalTx) int {
+	minerlogger.Infof("Added local tx (%x %v / %v)\n", tx.To[0:4], tx.GasPrice, tx.Value)
+
+	self.localTxId++
+	self.localTxs[self.localTxId] = tx
+	self.eth.EventMux().Post(tx)
+
+	return self.localTxId
+}
+
+func (self *Miner) RemoveLocalTx(id int) {
+	if tx := self.localTxs[id]; tx != nil {
+		minerlogger.Infof("Removed local tx (%x %v / %v)\n", tx.To[0:4], tx.GasPrice, tx.Value)
+	}
+	self.eth.EventMux().Post(&LocalTx{})
+
+	delete(self.localTxs, id)
+}
+
+func (self *Miner) Start() {
+	if self.mining {
+		return
+	}
+
+	minerlogger.Infoln("Starting mining operations")
+	self.mining = true
+	self.quitCh = make(chan struct{})
+	self.powQuitCh = make(chan struct{})
+
+	mux := self.eth.EventMux()
+	self.events = mux.Subscribe(core.NewBlockEvent{}, core.TxPreEvent{}, &LocalTx{})
+
+	go self.update()
+	go self.mine()
+}
+
+func (self *Miner) Stop() {
+	if !self.mining {
+		return
+	}
+
+	self.mining = false
+
+	minerlogger.Infoln("Stopping mining operations")
+
+	self.events.Unsubscribe()
+
+	close(self.quitCh)
+	close(self.powQuitCh)
+}
+
+func (self *Miner) Mining() bool {
+	return self.mining
+}
+
+func (self *Miner) update() {
+out:
+	for {
+		select {
+		case event := <-self.events.Chan():
+			switch event := event.(type) {
+			case core.NewBlockEvent:
+				block := event.Block
+				if self.eth.ChainManager().HasBlock(block.Hash()) {
+					self.reset()
+					self.eth.TxPool().RemoveSet(block.Transactions())
+					go self.mine()
+				} else if true {
+					// do uncle stuff
+				}
+			case core.TxPreEvent, *LocalTx:
+				self.reset()
+				go self.mine()
+			}
+		case <-self.quitCh:
+			break out
+		}
+	}
+}
+
+func (self *Miner) reset() {
+	close(self.powQuitCh)
+	self.powQuitCh = make(chan struct{})
+}
+
+func (self *Miner) mine() {
+	var (
+		blockManager = self.eth.BlockManager()
+		chainMan     = self.eth.ChainManager()
+		block        = chainMan.NewBlock(self.Coinbase)
+	)
+
+	// Apply uncles
+	if len(self.uncles) > 0 {
+		block.SetUncles(self.uncles)
+	}
+
+	parent := chainMan.GetBlock(block.PrevHash)
+	coinbase := block.State().GetOrNewStateObject(block.Coinbase)
+	coinbase.SetGasPool(block.CalcGasLimit(parent))
+
+	transactions := self.finiliseTxs()
+
+	// Accumulate all valid transactions and apply them to the new state
+	// Error may be ignored. It's not important during mining
+	receipts, txs, _, erroneous, err := blockManager.ApplyTransactions(coinbase, block.State(), block, transactions, true)
+	if err != nil {
+		minerlogger.Debugln(err)
+	}
+	self.eth.TxPool().RemoveSet(erroneous)
+
+	block.SetTransactions(txs)
+	block.SetReceipts(receipts)
+
+	// Accumulate the rewards included for this block
+	blockManager.AccumelateRewards(block.State(), block, parent)
+
+	block.State().Update(ethutil.Big0)
+
+	minerlogger.Infof("Mining on block. Includes %v transactions", len(transactions))
+
+	// Find a valid nonce
+	nonce := self.pow.Search(block, self.powQuitCh)
+	if nonce != nil {
+		block.Nonce = nonce
+		err := chainMan.InsertChain(types.Blocks{block})
+		if err != nil {
+			minerlogger.Infoln(err)
+		} else {
+			self.eth.Broadcast(wire.MsgBlockTy, []interface{}{block.Value().Val})
+
+			minerlogger.Infof("🔨  Mined block %x\n", block.Hash())
+			minerlogger.Infoln(block)
+		}
+
+		go self.mine()
+	}
+}
+
+func (self *Miner) finiliseTxs() types.Transactions {
+	// Sort the transactions by nonce in case of odd network propagation
+	actualSize := len(self.localTxs) // See copy below
+	txs := make(types.Transactions, actualSize+self.eth.TxPool().Size())
+
+	state := self.eth.ChainManager().TransState()
+	// XXX This has to change. Coinbase is, for new, same as key.
+	key := self.eth.KeyManager()
+	for i, ltx := range self.localTxs {
+		tx := types.NewTransactionMessage(ltx.To, ethutil.Big(ltx.Value), ethutil.Big(ltx.Gas), ethutil.Big(ltx.GasPrice), ltx.Data)
+		tx.SetNonce(state.GetNonce(self.Coinbase))
+		state.SetNonce(self.Coinbase, tx.Nonce()+1)
+
+		tx.Sign(key.PrivateKey())
+
+		txs[i] = tx
+	}
+
+	// Faster than append
+	for _, tx := range self.eth.TxPool().CurrentTransactions() {
+		if tx.GasPrice().Cmp(self.MinAcceptedGasPrice) >= 0 {
+			txs[actualSize] = tx
+			actualSize++
+		}
+	}
+
+	newTransactions := make(types.Transactions, actualSize)
+	copy(newTransactions, txs[:actualSize])
+	sort.Sort(types.TxByNonce{newTransactions})
+
+	return newTransactions
+}
diff --git a/mist/assets/ext/http.js b/mist/assets/ext/http.js
deleted file mode 100644
index 725ce8e6b02df04691447e1b9d26bcdff09e920c..0000000000000000000000000000000000000000
--- a/mist/assets/ext/http.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// this function is included locally, but you can also include separately via a header definition
-function request(url, callback) {
-	var xhr = new XMLHttpRequest();
-	xhr.onreadystatechange = (function(req) {
-		return function() {
-			if(req.readyState === 4) {
-				callback(req);
-			}
-		}
-	})(xhr);
-	xhr.open('GET', url, true);
-	xhr.send('');
-}
diff --git a/mist/assets/ext/qml_messaging.js b/mist/assets/ext/qml_messaging.js
deleted file mode 100644
index 8222c848d7632629e0247e9a9dcc99ec319f770a..0000000000000000000000000000000000000000
--- a/mist/assets/ext/qml_messaging.js
+++ /dev/null
@@ -1,13 +0,0 @@
-function HandleMessage(data) {
-	var message;
-	try { message = JSON.parse(data) } catch(e) {};
-
-	if(message) {
-		switch(message.type) {
-			case "coinbase":
-				return eth.coinBase();
-			case "block":
-				return eth.blockByNumber(0);
-		}
-	}
-}
diff --git a/mist/assets/ext/qt_messaging_adapter.js b/mist/assets/ext/qt_messaging_adapter.js
deleted file mode 100644
index ff69761777413960a8115f68f18c10e4ea91909a..0000000000000000000000000000000000000000
--- a/mist/assets/ext/qt_messaging_adapter.js
+++ /dev/null
@@ -1,21 +0,0 @@
-window._messagingAdapter = function(data) {
-	navigator.qt.postMessage(data);
-};
-
-navigator.qt.onmessage = function(ev) {
-	var data = JSON.parse(ev.data)
-
-	if(data._event !== undefined) {
-		eth.trigger(data._event, data.data);
-	} else {
-		if(data._seed) {
-			var cb = eth._callbacks[data._seed];
-			if(cb) {
-				cb.call(this, data.data)
-
-				// Remove the "trigger" callback
-				delete eth._callbacks[ev._seed];
-			}
-		}
-	}
-}
diff --git a/mist/assets/qml/views/javascript.qml b/mist/assets/qml/views/javascript.qml
deleted file mode 100644
index ea05c41485ec7314f049c26fefd99d0053f37232..0000000000000000000000000000000000000000
--- a/mist/assets/qml/views/javascript.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-import QtQuick 2.0
-import QtQuick.Controls 1.0;
-import QtQuick.Layouts 1.0;
-import QtQuick.Dialogs 1.0;
-import QtQuick.Window 2.1;
-import QtQuick.Controls.Styles 1.1
-import Ethereum 1.0
-
-Rectangle {
-	property var title: "JavaScript"
-	property var iconSource: "../tx.png"
-	property var menuItem
-
-	objectName: "javascriptView"
-	visible: false
-	anchors.fill: parent
-
-	TextField {
-		id: input
-		anchors {
-			left: parent.left
-			right: parent.right
-			bottom: parent.bottom
-		}
-		height: 20
-
-		Keys.onReturnPressed: {
-			var res = eth.evalJavascriptString(this.text);
-			this.text = "";
-
-			output.append(res)
-		}
-	}
-
-	TextArea {
-		id: output
-		text: "> JSRE Ready..."
-		anchors {
-			top: parent.top
-			left: parent.left
-			right: parent.right
-			bottom: input.top
-		}
-	}
-}
diff --git a/mist/assets/qml/webapp.qml b/mist/assets/qml/webapp.qml
deleted file mode 100644
index 09e6a83ad0c1bc7657524bb012dfb6f618710186..0000000000000000000000000000000000000000
--- a/mist/assets/qml/webapp.qml
+++ /dev/null
@@ -1,417 +0,0 @@
-import QtQuick 2.0
-import QtWebKit 3.0
-import QtWebKit.experimental 1.0
-import QtQuick.Controls 1.0;
-import QtQuick.Controls.Styles 1.0
-import QtQuick.Layouts 1.0;
-import QtQuick.Window 2.1;
-import Ethereum 1.0
-
-import "../ext/qml_messaging.js" as Messaging
-
-//ApplicationWindow {
-	Rectangle {
-		id: window
-		property var title: "Browser"
-		property var iconSource: "../browser.png"
-		property var menuItem
-
-		property alias url: webview.url
-		property alias webView: webview
-
-		property var cleanPath: false
-		property var open: function(url) {
-			if(!window.cleanPath) {
-				var uri = url;
-				if(!/.*\:\/\/.*/.test(uri)) {
-					uri = "http://" + uri;
-				}
-
-				var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/
-
-				if(reg.test(uri)) {
-					uri.replace(reg, function(match, pre, domain, path) {
-						uri = pre;
-
-						var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4));
-						var ip = [];
-						for(var i = 0, l = lookup.length; i < l; i++) {
-							ip.push(lookup.charCodeAt(i))
-						}
-
-						if(ip.length != 0) {
-							uri += lookup;
-						} else {
-							uri += domain;
-						}
-
-						uri += path;
-					});
-				}
-
-				window.cleanPath = true;
-
-				webview.url = uri;
-
-				//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>");
-				uriNav.text = uri;
-			} else {
-				// Prevent inf loop.
-				window.cleanPath = false;
-			}
-		}
-
-		Component.onCompleted: {
-			webview.url = "http://etherian.io"
-		}
-
-		signal messages(var messages, int id);
-		onMessages: {
-			// Bit of a cheat to get proper JSON
-			var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
-			webview.postEvent("messages", [m, id]);
-		}
-
-		Item {
-			objectName: "root"
-			id: root
-			anchors.fill: parent
-			state: "inspectorShown"
-
-			RowLayout {
-				id: navBar
-				height: 40
-				anchors {
-					left: parent.left
-					right: parent.right
-					leftMargin: 7
-				}
-
-				Button {
-					id: back
-					onClicked: {
-						webview.goBack()
-					}
-					style: ButtonStyle {
-						background: Image {
-							source: "../back.png"
-							width: 30
-							height: 30
-						}
-					}
-				}
-
-				TextField {
-					anchors {
-						left: back.right
-						right: toggleInspector.left
-						leftMargin: 5
-						rightMargin: 5
-					}
-					text: "http://etherian.io"
-					id: uriNav
-					y: parent.height / 2 - this.height / 2
-
-					Keys.onReturnPressed: {
-						webview.url = this.text;
-					}
-				}
-
-				Button {
-					id: toggleInspector
-					anchors {
-						right: parent.right
-					}
-					iconSource: "../bug.png"
-					onClicked: {
-						if(inspector.visible == true){
-							inspector.visible = false
-						}else{
-							inspector.visible = true
-							inspector.url = webview.experimental.remoteInspectorUrl
-						}
-					}
-				}
-			}
-
-
-			WebView {
-				objectName: "webView"
-				id: webview
-				anchors {
-					left: parent.left
-					right: parent.right
-					bottom: parent.bottom
-					top: navBar.bottom
-				}
-
-				//property var cleanPath: false
-				onNavigationRequested: {
-					window.open(request.url.toString());					
-				}
-
-				function sendMessage(data) {
-					webview.experimental.postMessage(JSON.stringify(data))
-				}
-
-				onTitleChanged: {
-					var data = Messaging.HandleMessage(title);
-					if(data) {
-						sendMessage(data)
-					}
-				}
-
-				experimental.preferences.javascriptEnabled: true
-				experimental.preferences.navigatorQtObjectEnabled: true
-				experimental.preferences.developerExtrasEnabled: true
-				experimental.userScripts: ["../ext/qt_messaging_adapter.js", "../ext/q.js", "../ext/big.js", "../ext/string.js", "../ext/html_messaging.js"]
-				experimental.onMessageReceived: {
-					console.log("[onMessageReceived]: ", message.data)
-					// TODO move to messaging.js
-					var data = JSON.parse(message.data)
-
-					try {
-						switch(data.call) {
-							case "compile":
-							postData(data._seed, eth.compile(data.args[0]))
-							break
-
-							case "getCoinBase":
-							postData(data._seed, eth.coinBase())
-
-							break
-
-							case "getIsListening":
-							postData(data._seed, eth.isListening())
-
-							break
-
-							case "getIsMining":
-							postData(data._seed, eth.isMining())
-
-							break
-
-							case "getPeerCount":
-							postData(data._seed, eth.peerCount())
-
-							break
-
-							case "getCountAt":
-							require(1)
-							postData(data._seed, eth.txCountAt(data.args[0]))
-
-							break
-
-							case "getCodeAt":
-							require(1)
-							var code = eth.codeAt(data.args[0])
-							postData(data._seed, code);
-
-							break
-
-							case "getBlockByNumber":
-							var block = eth.blockByNumber(data.args[0])
-							postData(data._seed, block)
-
-							break
-
-							case "getBlockByHash":
-							var block = eth.blockByHash(data.args[0])
-							postData(data._seed, block)
-
-							break
-
-							case "transact":
-							require(5)
-
-							var tx = eth.transact(data.args)
-							postData(data._seed, tx)
-
-							break
-
-							case "getStorageAt":
-							require(2);
-
-							var storage = eth.storageAt(data.args[0], data.args[1]);
-							postData(data._seed, storage)
-
-							break
-
-							case "call":
-							require(1);
-							var ret = eth.call(data.args)
-							postData(data._seed, ret)
-
-							break
-
-							case "getEachStorage":
-							require(1);
-							var storage = JSON.parse(eth.eachStorage(data.args[0]))
-							postData(data._seed, storage)
-
-							break
-
-							case "getTransactionsFor":
-							require(1);
-							var txs = eth.transactionsFor(data.args[0], true)
-							postData(data._seed, txs)
-
-							break
-
-							case "getBalanceAt":
-							require(1);
-
-							postData(data._seed, eth.balanceAt(data.args[0]));
-
-							break
-
-							case "getKey":
-							var key = eth.key().privateKey;
-
-							postData(data._seed, key)
-							break
-
-							case "watch":
-							require(2)
-							eth.watch(data.args[0], data.args[1])
-
-							case "disconnect":
-							require(1)
-							postData(data._seed, null)
-
-							break;
-
-							case "getSecretToAddress":
-							require(1)
-
-							var addr = eth.secretToAddress(data.args[0])
-							console.log("getsecret", addr)
-							postData(data._seed, addr)
-
-							break;
-
-							case "messages":
-							require(1);
-
-							var messages = JSON.parse(eth.getMessages(data.args[0]))
-							postData(data._seed, messages)
-
-							break
-
-							case "mutan":
-							require(1)
-
-							var code = eth.compileMutan(data.args[0])
-							postData(data._seed, "0x"+code)
-
-							break;
-
-							case "newFilterString":
-							require(1)
-							var id = eth.newFilterString(data.args[0])
-							postData(data._seed, id);
-							break;
-							case "newFilter":
-							require(1)
-							var id = eth.newFilter(data.args[0])
-
-							postData(data._seed, id);
-							break;
-
-							case "getMessages":
-							require(1);
-
-							var messages = eth.messages(data.args[0]);
-							var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
-							postData(data._seed, m);
-
-							break;
-
-							case "deleteFilter":
-							require(1);
-							eth.uninstallFilter(data.args[0])
-							break;
-						}
-					} catch(e) {
-						console.log(data.call + ": " + e)
-
-						postData(data._seed, null);
-					}
-				}
-
-
-				function post(seed, data) {
-					postData(data._seed, data)
-				}
-
-				function require(args, num) {
-					if(args.length < num) {
-						throw("required argument count of "+num+" got "+args.length);
-					}
-				}
-				function postData(seed, data) {
-					webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
-				}
-				function postEvent(event, data) {
-					webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
-				}
-
-				function onWatchedCb(data, id) {
-					var messages = JSON.parse(data)
-					postEvent("watched:"+id, messages)
-				}
-
-				function onNewBlockCb(block) {
-					postEvent("block:new", block)
-				}
-				function onObjectChangeCb(stateObject) {
-					postEvent("object:"+stateObject.address(), stateObject)
-				}
-				function onStorageChangeCb(storageObject) {
-					var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":");
-					postEvent(ev, [storageObject.address, storageObject.value])
-				}
-			}
-
-
-			Rectangle {
-				id: sizeGrip
-				color: "gray"
-				visible: false
-				height: 10
-				anchors {
-					left: root.left
-					right: root.right
-				}
-				y: Math.round(root.height * 2 / 3)
-
-				MouseArea {
-					anchors.fill: parent
-					drag.target: sizeGrip
-					drag.minimumY: 0
-					drag.maximumY: root.height
-					drag.axis: Drag.YAxis
-				}
-			}
-
-			WebView {
-				id: inspector
-				visible: false
-				anchors {
-					left: root.left
-					right: root.right
-					top: sizeGrip.bottom
-					bottom: root.bottom
-				}
-			}
-
-			states: [
-				State {
-					name: "inspectorShown"
-					PropertyChanges {
-						target: inspector
-					}
-				}
-			]
-		}
-	}
diff --git a/mist/errors.go b/mist/errors.go
deleted file mode 100644
index 409b7a281455a740c48391265a3732baa552b968..0000000000000000000000000000000000000000
--- a/mist/errors.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"os"
-
-	"gopkg.in/qml.v1"
-)
-
-func ErrorWindow(err error) {
-	engine := qml.NewEngine()
-	component, e := engine.LoadString("local", qmlErr)
-	if e != nil {
-		fmt.Println("err:", err)
-		os.Exit(1)
-	}
-
-	win := component.CreateWindow(nil)
-	win.Root().ObjectByName("label").Set("text", err.Error())
-	win.Show()
-	win.Wait()
-}
-
-const qmlErr = `
-import QtQuick 2.0; import QtQuick.Controls 1.0;
-ApplicationWindow {
-	width: 600; height: 150;
-	flags: Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint
-	title: "Error"
-	Text {
-		x: parent.width / 2 - this.width / 2;
-		y: parent.height / 2 - this.height / 2;
-		objectName: "label";
-	}
-}
-`
diff --git a/mist/ext_app.go b/mist/ext_app.go
deleted file mode 100644
index 514084c974f97a984a2bbb6be0551ecd887ba019..0000000000000000000000000000000000000000
--- a/mist/ext_app.go
+++ /dev/null
@@ -1,145 +0,0 @@
-package main
-
-import (
-	"encoding/json"
-
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethreact"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/go-ethereum/javascript"
-	"gopkg.in/qml.v1"
-)
-
-type AppContainer interface {
-	Create() error
-	Destroy()
-
-	Window() *qml.Window
-	Engine() *qml.Engine
-
-	NewBlock(*ethchain.Block)
-	NewWatcher(chan bool)
-	Messages(ethstate.Messages, string)
-	Post(string, int)
-}
-
-type ExtApplication struct {
-	*ethpipe.JSPipe
-	eth ethchain.EthManager
-
-	blockChan       chan ethreact.Event
-	messageChan     chan ethreact.Event
-	quitChan        chan bool
-	watcherQuitChan chan bool
-
-	filters map[string]*ethchain.Filter
-
-	container AppContainer
-	lib       *UiLib
-}
-
-func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication {
-	app := &ExtApplication{
-		ethpipe.NewJSPipe(lib.eth),
-		lib.eth,
-		make(chan ethreact.Event, 100),
-		make(chan ethreact.Event, 100),
-		make(chan bool),
-		make(chan bool),
-		make(map[string]*ethchain.Filter),
-		container,
-		lib,
-	}
-
-	return app
-}
-
-func (app *ExtApplication) run() {
-	// Set the "eth" api on to the containers context
-	context := app.container.Engine().Context()
-	context.SetVar("eth", app)
-	context.SetVar("ui", app.lib)
-
-	err := app.container.Create()
-	if err != nil {
-		logger.Errorln(err)
-		return
-	}
-
-	// Call the main loop
-	go app.mainLoop()
-
-	// Subscribe to events
-	reactor := app.lib.eth.Reactor()
-	reactor.Subscribe("newBlock", app.blockChan)
-	reactor.Subscribe("messages", app.messageChan)
-
-	app.container.NewWatcher(app.watcherQuitChan)
-
-	win := app.container.Window()
-	win.Show()
-	win.Wait()
-
-	app.stop()
-}
-
-func (app *ExtApplication) stop() {
-	// Clean up
-	reactor := app.lib.eth.Reactor()
-	reactor.Unsubscribe("newBlock", app.blockChan)
-
-	// Kill the main loop
-	app.quitChan <- true
-	app.watcherQuitChan <- true
-
-	close(app.blockChan)
-	close(app.quitChan)
-
-	app.container.Destroy()
-}
-
-func (app *ExtApplication) mainLoop() {
-out:
-	for {
-		select {
-		case <-app.quitChan:
-			break out
-		case block := <-app.blockChan:
-			if block, ok := block.Resource.(*ethchain.Block); ok {
-				app.container.NewBlock(block)
-			}
-		case msg := <-app.messageChan:
-			if messages, ok := msg.Resource.(ethstate.Messages); ok {
-				for id, filter := range app.filters {
-					msgs := filter.FilterMessages(messages)
-					if len(msgs) > 0 {
-						app.container.Messages(msgs, id)
-					}
-				}
-			}
-		}
-	}
-
-}
-
-func (self *ExtApplication) Watch(filterOptions map[string]interface{}, identifier string) {
-	self.filters[identifier] = ethchain.NewFilterFromMap(filterOptions, self.eth)
-}
-
-func (self *ExtApplication) GetMessages(object map[string]interface{}) string {
-	filter := ethchain.NewFilterFromMap(object, self.eth)
-
-	messages := filter.Find()
-	var msgs []javascript.JSMessage
-	for _, m := range messages {
-		msgs = append(msgs, javascript.NewJSMessage(m))
-	}
-
-	b, err := json.Marshal(msgs)
-	if err != nil {
-		return "{\"error\":" + err.Error() + "}"
-	}
-
-	return string(b)
-}
diff --git a/mist/qml_container.go b/mist/qml_container.go
deleted file mode 100644
index 85bd7c69956ed89a94be741d1fb4ee98a7fa2fa5..0000000000000000000000000000000000000000
--- a/mist/qml_container.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"runtime"
-
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethpipe"
-	"github.com/ethereum/eth-go/ethstate"
-	"github.com/ethereum/eth-go/ethutil"
-	"gopkg.in/qml.v1"
-)
-
-type QmlApplication struct {
-	win    *qml.Window
-	engine *qml.Engine
-	lib    *UiLib
-	path   string
-}
-
-func NewQmlApplication(path string, lib *UiLib) *QmlApplication {
-	engine := qml.NewEngine()
-	return &QmlApplication{engine: engine, path: path, lib: lib}
-}
-
-func (app *QmlApplication) Create() error {
-	path := string(app.path)
-
-	// For some reason for windows we get /c:/path/to/something, windows doesn't like the first slash but is fine with the others so we are removing it
-	if app.path[0] == '/' && runtime.GOOS == "windows" {
-		path = app.path[1:]
-	}
-
-	component, err := app.engine.LoadFile(path)
-	if err != nil {
-		logger.Warnln(err)
-	}
-	app.win = component.CreateWindow(nil)
-
-	return nil
-}
-
-func (app *QmlApplication) Destroy() {
-	app.engine.Destroy()
-}
-
-func (app *QmlApplication) NewWatcher(quitChan chan bool) {
-}
-
-// Events
-func (app *QmlApplication) NewBlock(block *ethchain.Block) {
-	pblock := ðpipe.JSBlock{Number: int(block.BlockInfo().Number), Hash: ethutil.Bytes2Hex(block.Hash())}
-	app.win.Call("onNewBlockCb", pblock)
-}
-
-func (self *QmlApplication) Messages(msgs ethstate.Messages, id string) {
-	fmt.Println("IMPLEMENT QML APPLICATION MESSAGES METHOD")
-}
-
-// Getters
-func (app *QmlApplication) Engine() *qml.Engine {
-	return app.engine
-}
-func (app *QmlApplication) Window() *qml.Window {
-	return app.win
-}
-
-func (app *QmlApplication) Post(data string, s int) {}
diff --git a/nat.go b/nat.go
new file mode 100644
index 0000000000000000000000000000000000000000..999308eb267696493004f7b31614a1ad56be603b
--- /dev/null
+++ b/nat.go
@@ -0,0 +1,12 @@
+package eth
+
+import (
+	"net"
+)
+
+// protocol is either "udp" or "tcp"
+type NAT interface {
+	GetExternalAddress() (addr net.IP, err error)
+	AddPortMapping(protocol string, externalPort, internalPort int, description string, timeout int) (mappedExternalPort int, err error)
+	DeletePortMapping(protocol string, externalPort, internalPort int) (err error)
+}
diff --git a/natpmp.go b/natpmp.go
new file mode 100644
index 0000000000000000000000000000000000000000..489342a4be162876ff59f641218f6110e7ae4b99
--- /dev/null
+++ b/natpmp.go
@@ -0,0 +1,55 @@
+package eth
+
+import (
+	"fmt"
+	"net"
+
+	natpmp "github.com/jackpal/go-nat-pmp"
+)
+
+// Adapt the NAT-PMP protocol to the NAT interface
+
+// TODO:
+//  + Register for changes to the external address.
+//  + Re-register port mapping when router reboots.
+//  + A mechanism for keeping a port mapping registered.
+
+type natPMPClient struct {
+	client *natpmp.Client
+}
+
+func NewNatPMP(gateway net.IP) (nat NAT) {
+	return &natPMPClient{natpmp.NewClient(gateway)}
+}
+
+func (n *natPMPClient) GetExternalAddress() (addr net.IP, err error) {
+	response, err := n.client.GetExternalAddress()
+	if err != nil {
+		return
+	}
+	ip := response.ExternalIPAddress
+	addr = net.IPv4(ip[0], ip[1], ip[2], ip[3])
+	return
+}
+
+func (n *natPMPClient) AddPortMapping(protocol string, externalPort, internalPort int,
+	description string, timeout int) (mappedExternalPort int, err error) {
+	if timeout <= 0 {
+		err = fmt.Errorf("timeout must not be <= 0")
+		return
+	}
+	// Note order of port arguments is switched between our AddPortMapping and the client's AddPortMapping.
+	response, err := n.client.AddPortMapping(protocol, internalPort, externalPort, timeout)
+	if err != nil {
+		return
+	}
+	mappedExternalPort = int(response.MappedExternalPort)
+	return
+}
+
+func (n *natPMPClient) DeletePortMapping(protocol string, externalPort, internalPort int) (err error) {
+	// To destroy a mapping, send an add-port with
+	// an internalPort of the internal port to destroy, an external port of zero and a time of zero.
+	_, err = n.client.AddPortMapping(protocol, internalPort, 0, 0)
+	return
+}
diff --git a/natupnp.go b/natupnp.go
new file mode 100644
index 0000000000000000000000000000000000000000..c7f9eeb622b30b3641cc51cbf3be29c63e73f21c
--- /dev/null
+++ b/natupnp.go
@@ -0,0 +1,338 @@
+package eth
+
+// Just enough UPnP to be able to forward ports
+//
+
+import (
+	"bytes"
+	"encoding/xml"
+	"errors"
+	"net"
+	"net/http"
+	"os"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type upnpNAT struct {
+	serviceURL string
+	ourIP      string
+}
+
+func Discover() (nat NAT, err error) {
+	ssdp, err := net.ResolveUDPAddr("udp4", "239.255.255.250:1900")
+	if err != nil {
+		return
+	}
+	conn, err := net.ListenPacket("udp4", ":0")
+	if err != nil {
+		return
+	}
+	socket := conn.(*net.UDPConn)
+	defer socket.Close()
+
+	err = socket.SetDeadline(time.Now().Add(10 * time.Second))
+	if err != nil {
+		return
+	}
+
+	st := "ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n"
+	buf := bytes.NewBufferString(
+		"M-SEARCH * HTTP/1.1\r\n" +
+			"HOST: 239.255.255.250:1900\r\n" +
+			st +
+			"MAN: \"ssdp:discover\"\r\n" +
+			"MX: 2\r\n\r\n")
+	message := buf.Bytes()
+	answerBytes := make([]byte, 1024)
+	for i := 0; i < 3; i++ {
+		_, err = socket.WriteToUDP(message, ssdp)
+		if err != nil {
+			return
+		}
+		var n int
+		n, _, err = socket.ReadFromUDP(answerBytes)
+		if err != nil {
+			continue
+			// socket.Close()
+			// return
+		}
+		answer := string(answerBytes[0:n])
+		if strings.Index(answer, "\r\n"+st) < 0 {
+			continue
+		}
+		// HTTP header field names are case-insensitive.
+		// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
+		locString := "\r\nlocation: "
+		answer = strings.ToLower(answer)
+		locIndex := strings.Index(answer, locString)
+		if locIndex < 0 {
+			continue
+		}
+		loc := answer[locIndex+len(locString):]
+		endIndex := strings.Index(loc, "\r\n")
+		if endIndex < 0 {
+			continue
+		}
+		locURL := loc[0:endIndex]
+		var serviceURL string
+		serviceURL, err = getServiceURL(locURL)
+		if err != nil {
+			return
+		}
+		var ourIP string
+		ourIP, err = getOurIP()
+		if err != nil {
+			return
+		}
+		nat = &upnpNAT{serviceURL: serviceURL, ourIP: ourIP}
+		return
+	}
+	err = errors.New("UPnP port discovery failed.")
+	return
+}
+
+// service represents the Service type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type service struct {
+	ServiceType string `xml:"serviceType"`
+	ControlURL  string `xml:"controlURL"`
+}
+
+// deviceList represents the deviceList type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type deviceList struct {
+	XMLName xml.Name `xml:"deviceList"`
+	Device  []device `xml:"device"`
+}
+
+// serviceList represents the serviceList type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type serviceList struct {
+	XMLName xml.Name  `xml:"serviceList"`
+	Service []service `xml:"service"`
+}
+
+// device represents the device type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type device struct {
+	XMLName     xml.Name    `xml:"device"`
+	DeviceType  string      `xml:"deviceType"`
+	DeviceList  deviceList  `xml:"deviceList"`
+	ServiceList serviceList `xml:"serviceList"`
+}
+
+// specVersion represents the specVersion in a UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type specVersion struct {
+	XMLName xml.Name `xml:"specVersion"`
+	Major   int      `xml:"major"`
+	Minor   int      `xml:"minor"`
+}
+
+// root represents the Root document for a UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type root struct {
+	XMLName     xml.Name `xml:"root"`
+	SpecVersion specVersion
+	Device      device
+}
+
+func getChildDevice(d *device, deviceType string) *device {
+	dl := d.DeviceList.Device
+	for i := 0; i < len(dl); i++ {
+		if dl[i].DeviceType == deviceType {
+			return &dl[i]
+		}
+	}
+	return nil
+}
+
+func getChildService(d *device, serviceType string) *service {
+	sl := d.ServiceList.Service
+	for i := 0; i < len(sl); i++ {
+		if sl[i].ServiceType == serviceType {
+			return &sl[i]
+		}
+	}
+	return nil
+}
+
+func getOurIP() (ip string, err error) {
+	hostname, err := os.Hostname()
+	if err != nil {
+		return
+	}
+	p, err := net.LookupIP(hostname)
+	if err != nil && len(p) > 0 {
+		return
+	}
+	return p[0].String(), nil
+}
+
+func getServiceURL(rootURL string) (url string, err error) {
+	r, err := http.Get(rootURL)
+	if err != nil {
+		return
+	}
+	defer r.Body.Close()
+	if r.StatusCode >= 400 {
+		err = errors.New(string(r.StatusCode))
+		return
+	}
+	var root root
+	err = xml.NewDecoder(r.Body).Decode(&root)
+
+	if err != nil {
+		return
+	}
+	a := &root.Device
+	if a.DeviceType != "urn:schemas-upnp-org:device:InternetGatewayDevice:1" {
+		err = errors.New("No InternetGatewayDevice")
+		return
+	}
+	b := getChildDevice(a, "urn:schemas-upnp-org:device:WANDevice:1")
+	if b == nil {
+		err = errors.New("No WANDevice")
+		return
+	}
+	c := getChildDevice(b, "urn:schemas-upnp-org:device:WANConnectionDevice:1")
+	if c == nil {
+		err = errors.New("No WANConnectionDevice")
+		return
+	}
+	d := getChildService(c, "urn:schemas-upnp-org:service:WANIPConnection:1")
+	if d == nil {
+		err = errors.New("No WANIPConnection")
+		return
+	}
+	url = combineURL(rootURL, d.ControlURL)
+	return
+}
+
+func combineURL(rootURL, subURL string) string {
+	protocolEnd := "://"
+	protoEndIndex := strings.Index(rootURL, protocolEnd)
+	a := rootURL[protoEndIndex+len(protocolEnd):]
+	rootIndex := strings.Index(a, "/")
+	return rootURL[0:protoEndIndex+len(protocolEnd)+rootIndex] + subURL
+}
+
+func soapRequest(url, function, message string) (r *http.Response, err error) {
+	fullMessage := "<?xml version=\"1.0\" ?>" +
+		"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" +
+		"<s:Body>" + message + "</s:Body></s:Envelope>"
+
+	req, err := http.NewRequest("POST", url, strings.NewReader(fullMessage))
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("Content-Type", "text/xml ; charset=\"utf-8\"")
+	req.Header.Set("User-Agent", "Darwin/10.0.0, UPnP/1.0, MiniUPnPc/1.3")
+	//req.Header.Set("Transfer-Encoding", "chunked")
+	req.Header.Set("SOAPAction", "\"urn:schemas-upnp-org:service:WANIPConnection:1#"+function+"\"")
+	req.Header.Set("Connection", "Close")
+	req.Header.Set("Cache-Control", "no-cache")
+	req.Header.Set("Pragma", "no-cache")
+
+	// log.Stderr("soapRequest ", req)
+	//fmt.Println(fullMessage)
+
+	r, err = http.DefaultClient.Do(req)
+	if err != nil {
+		return
+	}
+
+	if r.Body != nil {
+		defer r.Body.Close()
+	}
+
+	if r.StatusCode >= 400 {
+		// log.Stderr(function, r.StatusCode)
+		err = errors.New("Error " + strconv.Itoa(r.StatusCode) + " for " + function)
+		r = nil
+		return
+	}
+	return
+}
+
+type statusInfo struct {
+	externalIpAddress string
+}
+
+func (n *upnpNAT) getStatusInfo() (info statusInfo, err error) {
+
+	message := "<u:GetStatusInfo xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"</u:GetStatusInfo>"
+
+	var response *http.Response
+	response, err = soapRequest(n.serviceURL, "GetStatusInfo", message)
+	if err != nil {
+		return
+	}
+
+	// TODO: Write a soap reply parser. It has to eat the Body and envelope tags...
+
+	response.Body.Close()
+	return
+}
+
+func (n *upnpNAT) GetExternalAddress() (addr net.IP, err error) {
+	info, err := n.getStatusInfo()
+	if err != nil {
+		return
+	}
+	addr = net.ParseIP(info.externalIpAddress)
+	return
+}
+
+func (n *upnpNAT) AddPortMapping(protocol string, externalPort, internalPort int, description string, timeout int) (mappedExternalPort int, err error) {
+	// A single concatenation would break ARM compilation.
+	message := "<u:AddPortMapping xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"<NewRemoteHost></NewRemoteHost><NewExternalPort>" + strconv.Itoa(externalPort)
+	message += "</NewExternalPort><NewProtocol>" + protocol + "</NewProtocol>"
+	message += "<NewInternalPort>" + strconv.Itoa(internalPort) + "</NewInternalPort>" +
+		"<NewInternalClient>" + n.ourIP + "</NewInternalClient>" +
+		"<NewEnabled>1</NewEnabled><NewPortMappingDescription>"
+	message += description +
+		"</NewPortMappingDescription><NewLeaseDuration>" + strconv.Itoa(timeout) +
+		"</NewLeaseDuration></u:AddPortMapping>"
+
+	var response *http.Response
+	response, err = soapRequest(n.serviceURL, "AddPortMapping", message)
+	if err != nil {
+		return
+	}
+
+	// TODO: check response to see if the port was forwarded
+	// log.Println(message, response)
+	mappedExternalPort = externalPort
+	_ = response
+	return
+}
+
+func (n *upnpNAT) DeletePortMapping(protocol string, externalPort, internalPort int) (err error) {
+
+	message := "<u:DeletePortMapping xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"<NewRemoteHost></NewRemoteHost><NewExternalPort>" + strconv.Itoa(externalPort) +
+		"</NewExternalPort><NewProtocol>" + protocol + "</NewProtocol>" +
+		"</u:DeletePortMapping>"
+
+	var response *http.Response
+	response, err = soapRequest(n.serviceURL, "DeletePortMapping", message)
+	if err != nil {
+		return
+	}
+
+	// TODO: check response to see if the port was deleted
+	// log.Println(message, response)
+	_ = response
+	return
+}
diff --git a/p2p/client_identity.go b/p2p/client_identity.go
new file mode 100644
index 0000000000000000000000000000000000000000..bc865b63b04f54a89013cdca1e5462d553d095d6
--- /dev/null
+++ b/p2p/client_identity.go
@@ -0,0 +1,63 @@
+package p2p
+
+import (
+	"fmt"
+	"runtime"
+)
+
+// ClientIdentity represents the identity of a peer.
+type ClientIdentity interface {
+	String() string // human readable identity
+	Pubkey() []byte // 512-bit public key
+}
+
+type SimpleClientIdentity struct {
+	clientIdentifier string
+	version          string
+	customIdentifier string
+	os               string
+	implementation   string
+	pubkey           string
+}
+
+func NewSimpleClientIdentity(clientIdentifier string, version string, customIdentifier string, pubkey string) *SimpleClientIdentity {
+	clientIdentity := &SimpleClientIdentity{
+		clientIdentifier: clientIdentifier,
+		version:          version,
+		customIdentifier: customIdentifier,
+		os:               runtime.GOOS,
+		implementation:   runtime.Version(),
+		pubkey:           pubkey,
+	}
+
+	return clientIdentity
+}
+
+func (c *SimpleClientIdentity) init() {
+}
+
+func (c *SimpleClientIdentity) String() string {
+	var id string
+	if len(c.customIdentifier) > 0 {
+		id = "/" + c.customIdentifier
+	}
+
+	return fmt.Sprintf("%s/v%s%s/%s/%s",
+		c.clientIdentifier,
+		c.version,
+		id,
+		c.os,
+		c.implementation)
+}
+
+func (c *SimpleClientIdentity) Pubkey() []byte {
+	return []byte(c.pubkey)
+}
+
+func (c *SimpleClientIdentity) SetCustomIdentifier(customIdentifier string) {
+	c.customIdentifier = customIdentifier
+}
+
+func (c *SimpleClientIdentity) GetCustomIdentifier() string {
+	return c.customIdentifier
+}
diff --git a/p2p/client_identity_test.go b/p2p/client_identity_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..40b0e6f5e1a1a7e6774c64e37b060089b5fac640
--- /dev/null
+++ b/p2p/client_identity_test.go
@@ -0,0 +1,30 @@
+package p2p
+
+import (
+	"fmt"
+	"runtime"
+	"testing"
+)
+
+func TestClientIdentity(t *testing.T) {
+	clientIdentity := NewSimpleClientIdentity("Ethereum(G)", "0.5.16", "test", "pubkey")
+	clientString := clientIdentity.String()
+	expected := fmt.Sprintf("Ethereum(G)/v0.5.16/test/%s/%s", runtime.GOOS, runtime.Version())
+	if clientString != expected {
+		t.Errorf("Expected clientIdentity to be %v, got %v", expected, clientString)
+	}
+	customIdentifier := clientIdentity.GetCustomIdentifier()
+	if customIdentifier != "test" {
+		t.Errorf("Expected clientIdentity.GetCustomIdentifier() to be 'test', got %v", customIdentifier)
+	}
+	clientIdentity.SetCustomIdentifier("test2")
+	customIdentifier = clientIdentity.GetCustomIdentifier()
+	if customIdentifier != "test2" {
+		t.Errorf("Expected clientIdentity.GetCustomIdentifier() to be 'test2', got %v", customIdentifier)
+	}
+	clientString = clientIdentity.String()
+	expected = fmt.Sprintf("Ethereum(G)/v0.5.16/test2/%s/%s", runtime.GOOS, runtime.Version())
+	if clientString != expected {
+		t.Errorf("Expected clientIdentity to be %v, got %v", expected, clientString)
+	}
+}
diff --git a/p2p/message.go b/p2p/message.go
new file mode 100644
index 0000000000000000000000000000000000000000..f5418ff473d5c7869e07d084b2c3746d78be6a13
--- /dev/null
+++ b/p2p/message.go
@@ -0,0 +1,232 @@
+package p2p
+
+import (
+	"bytes"
+	"encoding/binary"
+	"errors"
+	"io"
+	"io/ioutil"
+	"math/big"
+	"sync/atomic"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/rlp"
+)
+
+// Msg defines the structure of a p2p message.
+//
+// Note that a Msg can only be sent once since the Payload reader is
+// consumed during sending. It is not possible to create a Msg and
+// send it any number of times. If you want to reuse an encoded
+// structure, encode the payload into a byte array and create a
+// separate Msg with a bytes.Reader as Payload for each send.
+type Msg struct {
+	Code    uint64
+	Size    uint32 // size of the paylod
+	Payload io.Reader
+}
+
+// NewMsg creates an RLP-encoded message with the given code.
+func NewMsg(code uint64, params ...interface{}) Msg {
+	buf := new(bytes.Buffer)
+	for _, p := range params {
+		buf.Write(ethutil.Encode(p))
+	}
+	return Msg{Code: code, Size: uint32(buf.Len()), Payload: buf}
+}
+
+func encodePayload(params ...interface{}) []byte {
+	buf := new(bytes.Buffer)
+	for _, p := range params {
+		buf.Write(ethutil.Encode(p))
+	}
+	return buf.Bytes()
+}
+
+// Decode parse the RLP content of a message into
+// the given value, which must be a pointer.
+//
+// For the decoding rules, please see package rlp.
+func (msg Msg) Decode(val interface{}) error {
+	s := rlp.NewListStream(msg.Payload, uint64(msg.Size))
+	return s.Decode(val)
+}
+
+// Discard reads any remaining payload data into a black hole.
+func (msg Msg) Discard() error {
+	_, err := io.Copy(ioutil.Discard, msg.Payload)
+	return err
+}
+
+type MsgReader interface {
+	ReadMsg() (Msg, error)
+}
+
+type MsgWriter interface {
+	// WriteMsg sends an existing message.
+	// The Payload reader of the message is consumed.
+	// Note that messages can be sent only once.
+	WriteMsg(Msg) error
+
+	// EncodeMsg writes an RLP-encoded message with the given
+	// code and data elements.
+	EncodeMsg(code uint64, data ...interface{}) error
+}
+
+// MsgReadWriter provides reading and writing of encoded messages.
+type MsgReadWriter interface {
+	MsgReader
+	MsgWriter
+}
+
+var magicToken = []byte{34, 64, 8, 145}
+
+func writeMsg(w io.Writer, msg Msg) error {
+	// TODO: handle case when Size + len(code) + len(listhdr) overflows uint32
+	code := ethutil.Encode(uint32(msg.Code))
+	listhdr := makeListHeader(msg.Size + uint32(len(code)))
+	payloadLen := uint32(len(listhdr)) + uint32(len(code)) + msg.Size
+
+	start := make([]byte, 8)
+	copy(start, magicToken)
+	binary.BigEndian.PutUint32(start[4:], payloadLen)
+
+	for _, b := range [][]byte{start, listhdr, code} {
+		if _, err := w.Write(b); err != nil {
+			return err
+		}
+	}
+	_, err := io.CopyN(w, msg.Payload, int64(msg.Size))
+	return err
+}
+
+func makeListHeader(length uint32) []byte {
+	if length < 56 {
+		return []byte{byte(length + 0xc0)}
+	}
+	enc := big.NewInt(int64(length)).Bytes()
+	lenb := byte(len(enc)) + 0xf7
+	return append([]byte{lenb}, enc...)
+}
+
+// readMsg reads a message header from r.
+// It takes an rlp.ByteReader to ensure that the decoding doesn't buffer.
+func readMsg(r rlp.ByteReader) (msg Msg, err error) {
+	// read magic and payload size
+	start := make([]byte, 8)
+	if _, err = io.ReadFull(r, start); err != nil {
+		return msg, newPeerError(errRead, "%v", err)
+	}
+	if !bytes.HasPrefix(start, magicToken) {
+		return msg, newPeerError(errMagicTokenMismatch, "got %x, want %x", start[:4], magicToken)
+	}
+	size := binary.BigEndian.Uint32(start[4:])
+
+	// decode start of RLP message to get the message code
+	posr := &postrack{r, 0}
+	s := rlp.NewStream(posr)
+	if _, err := s.List(); err != nil {
+		return msg, err
+	}
+	code, err := s.Uint()
+	if err != nil {
+		return msg, err
+	}
+	payloadsize := size - posr.p
+	return Msg{code, payloadsize, io.LimitReader(r, int64(payloadsize))}, nil
+}
+
+// postrack wraps an rlp.ByteReader with a position counter.
+type postrack struct {
+	r rlp.ByteReader
+	p uint32
+}
+
+func (r *postrack) Read(buf []byte) (int, error) {
+	n, err := r.r.Read(buf)
+	r.p += uint32(n)
+	return n, err
+}
+
+func (r *postrack) ReadByte() (byte, error) {
+	b, err := r.r.ReadByte()
+	if err == nil {
+		r.p++
+	}
+	return b, err
+}
+
+// MsgPipe creates a message pipe. Reads on one end are matched
+// with writes on the other. The pipe is full-duplex, both ends
+// implement MsgReadWriter.
+func MsgPipe() (*MsgPipeRW, *MsgPipeRW) {
+	var (
+		c1, c2  = make(chan Msg), make(chan Msg)
+		closing = make(chan struct{})
+		closed  = new(int32)
+		rw1     = &MsgPipeRW{c1, c2, closing, closed}
+		rw2     = &MsgPipeRW{c2, c1, closing, closed}
+	)
+	return rw1, rw2
+}
+
+// ErrPipeClosed is returned from pipe operations after the
+// pipe has been closed.
+var ErrPipeClosed = errors.New("p2p: read or write on closed message pipe")
+
+// MsgPipeRW is an endpoint of a MsgReadWriter pipe.
+type MsgPipeRW struct {
+	w       chan<- Msg
+	r       <-chan Msg
+	closing chan struct{}
+	closed  *int32
+}
+
+// WriteMsg sends a messsage on the pipe.
+// It blocks until the receiver has consumed the message payload.
+func (p *MsgPipeRW) WriteMsg(msg Msg) error {
+	if atomic.LoadInt32(p.closed) == 0 {
+		consumed := make(chan struct{}, 1)
+		msg.Payload = &eofSignal{msg.Payload, int64(msg.Size), consumed}
+		select {
+		case p.w <- msg:
+			if msg.Size > 0 {
+				// wait for payload read or discard
+				<-consumed
+			}
+			return nil
+		case <-p.closing:
+		}
+	}
+	return ErrPipeClosed
+}
+
+// EncodeMsg is a convenient shorthand for sending an RLP-encoded message.
+func (p *MsgPipeRW) EncodeMsg(code uint64, data ...interface{}) error {
+	return p.WriteMsg(NewMsg(code, data...))
+}
+
+// ReadMsg returns a message sent on the other end of the pipe.
+func (p *MsgPipeRW) ReadMsg() (Msg, error) {
+	if atomic.LoadInt32(p.closed) == 0 {
+		select {
+		case msg := <-p.r:
+			return msg, nil
+		case <-p.closing:
+		}
+	}
+	return Msg{}, ErrPipeClosed
+}
+
+// Close unblocks any pending ReadMsg and WriteMsg calls on both ends
+// of the pipe. They will return ErrPipeClosed. Note that Close does
+// not interrupt any reads from a message payload.
+func (p *MsgPipeRW) Close() error {
+	if atomic.AddInt32(p.closed, 1) != 1 {
+		// someone else is already closing
+		atomic.StoreInt32(p.closed, 1) // avoid overflow
+		return nil
+	}
+	close(p.closing)
+	return nil
+}
diff --git a/p2p/message_test.go b/p2p/message_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..066d2516d4e0b55b94b0edfc76ad16d7bd7c7425
--- /dev/null
+++ b/p2p/message_test.go
@@ -0,0 +1,133 @@
+package p2p
+
+import (
+	"bytes"
+	"fmt"
+	"io/ioutil"
+	"runtime"
+	"testing"
+	"time"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func TestNewMsg(t *testing.T) {
+	msg := NewMsg(3, 1, "000")
+	if msg.Code != 3 {
+		t.Errorf("incorrect code %d, want %d", msg.Code)
+	}
+	if msg.Size != 5 {
+		t.Errorf("incorrect size %d, want %d", msg.Size, 5)
+	}
+	pl, _ := ioutil.ReadAll(msg.Payload)
+	expect := []byte{0x01, 0x83, 0x30, 0x30, 0x30}
+	if !bytes.Equal(pl, expect) {
+		t.Errorf("incorrect payload content, got %x, want %x", pl, expect)
+	}
+}
+
+func TestEncodeDecodeMsg(t *testing.T) {
+	msg := NewMsg(3, 1, "000")
+	buf := new(bytes.Buffer)
+	if err := writeMsg(buf, msg); err != nil {
+		t.Fatalf("encodeMsg error: %v", err)
+	}
+	// t.Logf("encoded: %x", buf.Bytes())
+
+	decmsg, err := readMsg(buf)
+	if err != nil {
+		t.Fatalf("readMsg error: %v", err)
+	}
+	if decmsg.Code != 3 {
+		t.Errorf("incorrect code %d, want %d", decmsg.Code, 3)
+	}
+	if decmsg.Size != 5 {
+		t.Errorf("incorrect size %d, want %d", decmsg.Size, 5)
+	}
+
+	var data struct {
+		I uint
+		S string
+	}
+	if err := decmsg.Decode(&data); err != nil {
+		t.Fatalf("Decode error: %v", err)
+	}
+	if data.I != 1 {
+		t.Errorf("incorrect data.I: got %v, expected %d", data.I, 1)
+	}
+	if data.S != "000" {
+		t.Errorf("incorrect data.S: got %q, expected %q", data.S, "000")
+	}
+}
+
+func TestDecodeRealMsg(t *testing.T) {
+	data := ethutil.Hex2Bytes("2240089100000080f87e8002b5457468657265756d282b2b292f5065657220536572766572204f6e652f76302e372e382f52656c656173652f4c696e75782f672b2bc082765fb84086dd80b7aefd6a6d2e3b93f4f300a86bfb6ef7bdc97cb03f793db6bb")
+	msg, err := readMsg(bytes.NewReader(data))
+	if err != nil {
+		t.Fatalf("unexpected error: %v", err)
+	}
+
+	if msg.Code != 0 {
+		t.Errorf("incorrect code %d, want %d", msg.Code, 0)
+	}
+}
+
+func ExampleMsgPipe() {
+	rw1, rw2 := MsgPipe()
+	go func() {
+		rw1.EncodeMsg(8, []byte{0, 0})
+		rw1.EncodeMsg(5, []byte{1, 1})
+		rw1.Close()
+	}()
+
+	for {
+		msg, err := rw2.ReadMsg()
+		if err != nil {
+			break
+		}
+		var data [1][]byte
+		msg.Decode(&data)
+		fmt.Printf("msg: %d, %x\n", msg.Code, data[0])
+	}
+	// Output:
+	// msg: 8, 0000
+	// msg: 5, 0101
+}
+
+func TestMsgPipeUnblockWrite(t *testing.T) {
+loop:
+	for i := 0; i < 100; i++ {
+		rw1, rw2 := MsgPipe()
+		done := make(chan struct{})
+		go func() {
+			if err := rw1.EncodeMsg(1); err == nil {
+				t.Error("EncodeMsg returned nil error")
+			} else if err != ErrPipeClosed {
+				t.Error("EncodeMsg returned wrong error: got %v, want %v", err, ErrPipeClosed)
+			}
+			close(done)
+		}()
+
+		// this call should ensure that EncodeMsg is waiting to
+		// deliver sometimes. if this isn't done, Close is likely to
+		// be executed before EncodeMsg starts and then we won't test
+		// all the cases.
+		runtime.Gosched()
+
+		rw2.Close()
+		select {
+		case <-done:
+		case <-time.After(200 * time.Millisecond):
+			t.Errorf("write didn't unblock")
+			break loop
+		}
+	}
+}
+
+// This test should panic if concurrent close isn't implemented correctly.
+func TestMsgPipeConcurrentClose(t *testing.T) {
+	rw1, _ := MsgPipe()
+	for i := 0; i < 10; i++ {
+		go rw1.Close()
+	}
+}
diff --git a/p2p/natpmp.go b/p2p/natpmp.go
new file mode 100644
index 0000000000000000000000000000000000000000..6714678c4cab0fe3e6e3e71b4a7ffdba03166ce6
--- /dev/null
+++ b/p2p/natpmp.go
@@ -0,0 +1,55 @@
+package p2p
+
+import (
+	"fmt"
+	"net"
+	"time"
+
+	natpmp "github.com/jackpal/go-nat-pmp"
+)
+
+// Adapt the NAT-PMP protocol to the NAT interface
+
+// TODO:
+//  + Register for changes to the external address.
+//  + Re-register port mapping when router reboots.
+//  + A mechanism for keeping a port mapping registered.
+//  + Discover gateway address automatically.
+
+type natPMPClient struct {
+	client *natpmp.Client
+}
+
+// PMP returns a NAT traverser that uses NAT-PMP. The provided gateway
+// address should be the IP of your router.
+func PMP(gateway net.IP) (nat NAT) {
+	return &natPMPClient{natpmp.NewClient(gateway)}
+}
+
+func (*natPMPClient) String() string {
+	return "NAT-PMP"
+}
+
+func (n *natPMPClient) GetExternalAddress() (net.IP, error) {
+	response, err := n.client.GetExternalAddress()
+	if err != nil {
+		return nil, err
+	}
+	return response.ExternalIPAddress[:], nil
+}
+
+func (n *natPMPClient) AddPortMapping(protocol string, extport, intport int, name string, lifetime time.Duration) error {
+	if lifetime <= 0 {
+		return fmt.Errorf("lifetime must not be <= 0")
+	}
+	// Note order of port arguments is switched between our AddPortMapping and the client's AddPortMapping.
+	_, err := n.client.AddPortMapping(protocol, intport, extport, int(lifetime/time.Second))
+	return err
+}
+
+func (n *natPMPClient) DeletePortMapping(protocol string, externalPort, internalPort int) (err error) {
+	// To destroy a mapping, send an add-port with
+	// an internalPort of the internal port to destroy, an external port of zero and a time of zero.
+	_, err = n.client.AddPortMapping(protocol, internalPort, 0, 0)
+	return
+}
diff --git a/p2p/natupnp.go b/p2p/natupnp.go
new file mode 100644
index 0000000000000000000000000000000000000000..2e0d8ce8d5944840e05246ce3ee7bdc4c9446351
--- /dev/null
+++ b/p2p/natupnp.go
@@ -0,0 +1,341 @@
+package p2p
+
+// Just enough UPnP to be able to forward ports
+//
+
+import (
+	"bytes"
+	"encoding/xml"
+	"errors"
+	"fmt"
+	"net"
+	"net/http"
+	"os"
+	"strconv"
+	"strings"
+	"time"
+)
+
+const (
+	upnpDiscoverAttempts = 3
+	upnpDiscoverTimeout  = 5 * time.Second
+)
+
+// UPNP returns a NAT port mapper that uses UPnP. It will attempt to
+// discover the address of your router using UDP broadcasts.
+func UPNP() NAT {
+	return &upnpNAT{}
+}
+
+type upnpNAT struct {
+	serviceURL string
+	ourIP      string
+}
+
+func (n *upnpNAT) String() string {
+	return "UPNP"
+}
+
+func (n *upnpNAT) discover() error {
+	if n.serviceURL != "" {
+		// already discovered
+		return nil
+	}
+
+	ssdp, err := net.ResolveUDPAddr("udp4", "239.255.255.250:1900")
+	if err != nil {
+		return err
+	}
+	// TODO: try on all network interfaces simultaneously.
+	// Broadcasting on 0.0.0.0 could select a random interface
+	// to send on (platform specific).
+	conn, err := net.ListenPacket("udp4", ":0")
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+
+	conn.SetDeadline(time.Now().Add(10 * time.Second))
+	st := "ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n"
+	buf := bytes.NewBufferString(
+		"M-SEARCH * HTTP/1.1\r\n" +
+			"HOST: 239.255.255.250:1900\r\n" +
+			st +
+			"MAN: \"ssdp:discover\"\r\n" +
+			"MX: 2\r\n\r\n")
+	message := buf.Bytes()
+	answerBytes := make([]byte, 1024)
+	for i := 0; i < upnpDiscoverAttempts; i++ {
+		_, err = conn.WriteTo(message, ssdp)
+		if err != nil {
+			return err
+		}
+		nn, _, err := conn.ReadFrom(answerBytes)
+		if err != nil {
+			continue
+		}
+		answer := string(answerBytes[0:nn])
+		if strings.Index(answer, "\r\n"+st) < 0 {
+			continue
+		}
+		// HTTP header field names are case-insensitive.
+		// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
+		locString := "\r\nlocation: "
+		answer = strings.ToLower(answer)
+		locIndex := strings.Index(answer, locString)
+		if locIndex < 0 {
+			continue
+		}
+		loc := answer[locIndex+len(locString):]
+		endIndex := strings.Index(loc, "\r\n")
+		if endIndex < 0 {
+			continue
+		}
+		locURL := loc[0:endIndex]
+		var serviceURL string
+		serviceURL, err = getServiceURL(locURL)
+		if err != nil {
+			return err
+		}
+		var ourIP string
+		ourIP, err = getOurIP()
+		if err != nil {
+			return err
+		}
+		n.serviceURL = serviceURL
+		n.ourIP = ourIP
+		return nil
+	}
+	return errors.New("UPnP port discovery failed.")
+}
+
+func (n *upnpNAT) GetExternalAddress() (addr net.IP, err error) {
+	if err := n.discover(); err != nil {
+		return nil, err
+	}
+	info, err := n.getStatusInfo()
+	return net.ParseIP(info.externalIpAddress), err
+}
+
+func (n *upnpNAT) AddPortMapping(protocol string, extport, intport int, description string, lifetime time.Duration) error {
+	if err := n.discover(); err != nil {
+		return err
+	}
+
+	// A single concatenation would break ARM compilation.
+	message := "<u:AddPortMapping xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"<NewRemoteHost></NewRemoteHost><NewExternalPort>" + strconv.Itoa(extport)
+	message += "</NewExternalPort><NewProtocol>" + protocol + "</NewProtocol>"
+	message += "<NewInternalPort>" + strconv.Itoa(extport) + "</NewInternalPort>" +
+		"<NewInternalClient>" + n.ourIP + "</NewInternalClient>" +
+		"<NewEnabled>1</NewEnabled><NewPortMappingDescription>"
+	message += description +
+		"</NewPortMappingDescription><NewLeaseDuration>" + fmt.Sprint(lifetime/time.Second) +
+		"</NewLeaseDuration></u:AddPortMapping>"
+
+	// TODO: check response to see if the port was forwarded
+	_, err := soapRequest(n.serviceURL, "AddPortMapping", message)
+	return err
+}
+
+func (n *upnpNAT) DeletePortMapping(protocol string, externalPort, internalPort int) error {
+	if err := n.discover(); err != nil {
+		return err
+	}
+
+	message := "<u:DeletePortMapping xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"<NewRemoteHost></NewRemoteHost><NewExternalPort>" + strconv.Itoa(externalPort) +
+		"</NewExternalPort><NewProtocol>" + protocol + "</NewProtocol>" +
+		"</u:DeletePortMapping>"
+
+	// TODO: check response to see if the port was deleted
+	_, err := soapRequest(n.serviceURL, "DeletePortMapping", message)
+	return err
+}
+
+type statusInfo struct {
+	externalIpAddress string
+}
+
+func (n *upnpNAT) getStatusInfo() (info statusInfo, err error) {
+	message := "<u:GetStatusInfo xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\r\n" +
+		"</u:GetStatusInfo>"
+
+	var response *http.Response
+	response, err = soapRequest(n.serviceURL, "GetStatusInfo", message)
+	if err != nil {
+		return
+	}
+
+	// TODO: Write a soap reply parser. It has to eat the Body and envelope tags...
+
+	response.Body.Close()
+	return
+}
+
+// service represents the Service type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type service struct {
+	ServiceType string `xml:"serviceType"`
+	ControlURL  string `xml:"controlURL"`
+}
+
+// deviceList represents the deviceList type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type deviceList struct {
+	XMLName xml.Name `xml:"deviceList"`
+	Device  []device `xml:"device"`
+}
+
+// serviceList represents the serviceList type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type serviceList struct {
+	XMLName xml.Name  `xml:"serviceList"`
+	Service []service `xml:"service"`
+}
+
+// device represents the device type in an UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type device struct {
+	XMLName     xml.Name    `xml:"device"`
+	DeviceType  string      `xml:"deviceType"`
+	DeviceList  deviceList  `xml:"deviceList"`
+	ServiceList serviceList `xml:"serviceList"`
+}
+
+// specVersion represents the specVersion in a UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type specVersion struct {
+	XMLName xml.Name `xml:"specVersion"`
+	Major   int      `xml:"major"`
+	Minor   int      `xml:"minor"`
+}
+
+// root represents the Root document for a UPnP xml description.
+// Only the parts we care about are present and thus the xml may have more
+// fields than present in the structure.
+type root struct {
+	XMLName     xml.Name `xml:"root"`
+	SpecVersion specVersion
+	Device      device
+}
+
+func getChildDevice(d *device, deviceType string) *device {
+	dl := d.DeviceList.Device
+	for i := 0; i < len(dl); i++ {
+		if dl[i].DeviceType == deviceType {
+			return &dl[i]
+		}
+	}
+	return nil
+}
+
+func getChildService(d *device, serviceType string) *service {
+	sl := d.ServiceList.Service
+	for i := 0; i < len(sl); i++ {
+		if sl[i].ServiceType == serviceType {
+			return &sl[i]
+		}
+	}
+	return nil
+}
+
+func getOurIP() (ip string, err error) {
+	hostname, err := os.Hostname()
+	if err != nil {
+		return
+	}
+	p, err := net.LookupIP(hostname)
+	if err != nil && len(p) > 0 {
+		return
+	}
+	return p[0].String(), nil
+}
+
+func getServiceURL(rootURL string) (url string, err error) {
+	r, err := http.Get(rootURL)
+	if err != nil {
+		return
+	}
+	defer r.Body.Close()
+	if r.StatusCode >= 400 {
+		err = errors.New(string(r.StatusCode))
+		return
+	}
+	var root root
+	err = xml.NewDecoder(r.Body).Decode(&root)
+
+	if err != nil {
+		return
+	}
+	a := &root.Device
+	if a.DeviceType != "urn:schemas-upnp-org:device:InternetGatewayDevice:1" {
+		err = errors.New("No InternetGatewayDevice")
+		return
+	}
+	b := getChildDevice(a, "urn:schemas-upnp-org:device:WANDevice:1")
+	if b == nil {
+		err = errors.New("No WANDevice")
+		return
+	}
+	c := getChildDevice(b, "urn:schemas-upnp-org:device:WANConnectionDevice:1")
+	if c == nil {
+		err = errors.New("No WANConnectionDevice")
+		return
+	}
+	d := getChildService(c, "urn:schemas-upnp-org:service:WANIPConnection:1")
+	if d == nil {
+		err = errors.New("No WANIPConnection")
+		return
+	}
+	url = combineURL(rootURL, d.ControlURL)
+	return
+}
+
+func combineURL(rootURL, subURL string) string {
+	protocolEnd := "://"
+	protoEndIndex := strings.Index(rootURL, protocolEnd)
+	a := rootURL[protoEndIndex+len(protocolEnd):]
+	rootIndex := strings.Index(a, "/")
+	return rootURL[0:protoEndIndex+len(protocolEnd)+rootIndex] + subURL
+}
+
+func soapRequest(url, function, message string) (r *http.Response, err error) {
+	fullMessage := "<?xml version=\"1.0\" ?>" +
+		"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" +
+		"<s:Body>" + message + "</s:Body></s:Envelope>"
+
+	req, err := http.NewRequest("POST", url, strings.NewReader(fullMessage))
+	if err != nil {
+		return
+	}
+	req.Header.Set("Content-Type", "text/xml ; charset=\"utf-8\"")
+	req.Header.Set("User-Agent", "Darwin/10.0.0, UPnP/1.0, MiniUPnPc/1.3")
+	//req.Header.Set("Transfer-Encoding", "chunked")
+	req.Header.Set("SOAPAction", "\"urn:schemas-upnp-org:service:WANIPConnection:1#"+function+"\"")
+	req.Header.Set("Connection", "Close")
+	req.Header.Set("Cache-Control", "no-cache")
+	req.Header.Set("Pragma", "no-cache")
+
+	r, err = http.DefaultClient.Do(req)
+	if err != nil {
+		return
+	}
+
+	if r.Body != nil {
+		defer r.Body.Close()
+	}
+
+	if r.StatusCode >= 400 {
+		// log.Stderr(function, r.StatusCode)
+		err = errors.New("Error " + strconv.Itoa(r.StatusCode) + " for " + function)
+		r = nil
+		return
+	}
+	return
+}
diff --git a/p2p/peer.go b/p2p/peer.go
new file mode 100644
index 0000000000000000000000000000000000000000..86c4d7ab54ac203c60c601685dd9f23a497112f9
--- /dev/null
+++ b/p2p/peer.go
@@ -0,0 +1,462 @@
+package p2p
+
+import (
+	"bufio"
+	"bytes"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"net"
+	"sort"
+	"sync"
+	"time"
+
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+)
+
+// peerAddr is the structure of a peer list element.
+// It is also a valid net.Addr.
+type peerAddr struct {
+	IP     net.IP
+	Port   uint64
+	Pubkey []byte // optional
+}
+
+func newPeerAddr(addr net.Addr, pubkey []byte) *peerAddr {
+	n := addr.Network()
+	if n != "tcp" && n != "tcp4" && n != "tcp6" {
+		// for testing with non-TCP
+		return &peerAddr{net.ParseIP("127.0.0.1"), 30303, pubkey}
+	}
+	ta := addr.(*net.TCPAddr)
+	return &peerAddr{ta.IP, uint64(ta.Port), pubkey}
+}
+
+func (d peerAddr) Network() string {
+	if d.IP.To4() != nil {
+		return "tcp4"
+	} else {
+		return "tcp6"
+	}
+}
+
+func (d peerAddr) String() string {
+	return fmt.Sprintf("%v:%d", d.IP, d.Port)
+}
+
+func (d peerAddr) RlpData() interface{} {
+	return []interface{}{d.IP, d.Port, d.Pubkey}
+}
+
+// Peer represents a remote peer.
+type Peer struct {
+	// Peers have all the log methods.
+	// Use them to display messages related to the peer.
+	*logger.Logger
+
+	infolock   sync.Mutex
+	identity   ClientIdentity
+	caps       []Cap
+	listenAddr *peerAddr // what remote peer is listening on
+	dialAddr   *peerAddr // non-nil if dialing
+
+	// The mutex protects the connection
+	// so only one protocol can write at a time.
+	writeMu sync.Mutex
+	conn    net.Conn
+	bufconn *bufio.ReadWriter
+
+	// These fields maintain the running protocols.
+	protocols       []Protocol
+	runBaseProtocol bool // for testing
+
+	runlock sync.RWMutex // protects running
+	running map[string]*proto
+
+	protoWG  sync.WaitGroup
+	protoErr chan error
+	closed   chan struct{}
+	disc     chan DiscReason
+
+	activity event.TypeMux // for activity events
+
+	slot int // index into Server peer list
+
+	// These fields are kept so base protocol can access them.
+	// TODO: this should be one or more interfaces
+	ourID         ClientIdentity        // client id of the Server
+	ourListenAddr *peerAddr             // listen addr of Server, nil if not listening
+	newPeerAddr   chan<- *peerAddr      // tell server about received peers
+	otherPeers    func() []*Peer        // should return the list of all peers
+	pubkeyHook    func(*peerAddr) error // called at end of handshake to validate pubkey
+}
+
+// NewPeer returns a peer for testing purposes.
+func NewPeer(id ClientIdentity, caps []Cap) *Peer {
+	conn, _ := net.Pipe()
+	peer := newPeer(conn, nil, nil)
+	peer.setHandshakeInfo(id, nil, caps)
+	close(peer.closed)
+	return peer
+}
+
+func newServerPeer(server *Server, conn net.Conn, dialAddr *peerAddr) *Peer {
+	p := newPeer(conn, server.Protocols, dialAddr)
+	p.ourID = server.Identity
+	p.newPeerAddr = server.peerConnect
+	p.otherPeers = server.Peers
+	p.pubkeyHook = server.verifyPeer
+	p.runBaseProtocol = true
+
+	// laddr can be updated concurrently by NAT traversal.
+	// newServerPeer must be called with the server lock held.
+	if server.laddr != nil {
+		p.ourListenAddr = newPeerAddr(server.laddr, server.Identity.Pubkey())
+	}
+	return p
+}
+
+func newPeer(conn net.Conn, protocols []Protocol, dialAddr *peerAddr) *Peer {
+	p := &Peer{
+		Logger:    logger.NewLogger("P2P " + conn.RemoteAddr().String()),
+		conn:      conn,
+		dialAddr:  dialAddr,
+		bufconn:   bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)),
+		protocols: protocols,
+		running:   make(map[string]*proto),
+		disc:      make(chan DiscReason),
+		protoErr:  make(chan error),
+		closed:    make(chan struct{}),
+	}
+	return p
+}
+
+// Identity returns the client identity of the remote peer. The
+// identity can be nil if the peer has not yet completed the
+// handshake.
+func (p *Peer) Identity() ClientIdentity {
+	p.infolock.Lock()
+	defer p.infolock.Unlock()
+	return p.identity
+}
+
+// Caps returns the capabilities (supported subprotocols) of the remote peer.
+func (p *Peer) Caps() []Cap {
+	p.infolock.Lock()
+	defer p.infolock.Unlock()
+	return p.caps
+}
+
+func (p *Peer) setHandshakeInfo(id ClientIdentity, laddr *peerAddr, caps []Cap) {
+	p.infolock.Lock()
+	p.identity = id
+	p.listenAddr = laddr
+	p.caps = caps
+	p.infolock.Unlock()
+}
+
+// RemoteAddr returns the remote address of the network connection.
+func (p *Peer) RemoteAddr() net.Addr {
+	return p.conn.RemoteAddr()
+}
+
+// LocalAddr returns the local address of the network connection.
+func (p *Peer) LocalAddr() net.Addr {
+	return p.conn.LocalAddr()
+}
+
+// Disconnect terminates the peer connection with the given reason.
+// It returns immediately and does not wait until the connection is closed.
+func (p *Peer) Disconnect(reason DiscReason) {
+	select {
+	case p.disc <- reason:
+	case <-p.closed:
+	}
+}
+
+// String implements fmt.Stringer.
+func (p *Peer) String() string {
+	kind := "inbound"
+	p.infolock.Lock()
+	if p.dialAddr != nil {
+		kind = "outbound"
+	}
+	p.infolock.Unlock()
+	return fmt.Sprintf("Peer(%p %v %s)", p, p.conn.RemoteAddr(), kind)
+}
+
+const (
+	// maximum amount of time allowed for reading a message
+	msgReadTimeout = 5 * time.Second
+	// maximum amount of time allowed for writing a message
+	msgWriteTimeout = 5 * time.Second
+	// messages smaller than this many bytes will be read at
+	// once before passing them to a protocol.
+	wholePayloadSize = 64 * 1024
+)
+
+var (
+	inactivityTimeout     = 2 * time.Second
+	disconnectGracePeriod = 2 * time.Second
+)
+
+func (p *Peer) loop() (reason DiscReason, err error) {
+	defer p.activity.Stop()
+	defer p.closeProtocols()
+	defer close(p.closed)
+	defer p.conn.Close()
+
+	// read loop
+	readMsg := make(chan Msg)
+	readErr := make(chan error)
+	readNext := make(chan bool, 1)
+	protoDone := make(chan struct{}, 1)
+	go p.readLoop(readMsg, readErr, readNext)
+	readNext <- true
+
+	if p.runBaseProtocol {
+		p.startBaseProtocol()
+	}
+
+loop:
+	for {
+		select {
+		case msg := <-readMsg:
+			// a new message has arrived.
+			var wait bool
+			if wait, err = p.dispatch(msg, protoDone); err != nil {
+				p.Errorf("msg dispatch error: %v\n", err)
+				reason = discReasonForError(err)
+				break loop
+			}
+			if !wait {
+				// Msg has already been read completely, continue with next message.
+				readNext <- true
+			}
+			p.activity.Post(time.Now())
+		case <-protoDone:
+			// protocol has consumed the message payload,
+			// we can continue reading from the socket.
+			readNext <- true
+
+		case err := <-readErr:
+			// read failed. there is no need to run the
+			// polite disconnect sequence because the connection
+			// is probably dead anyway.
+			// TODO: handle write errors as well
+			return DiscNetworkError, err
+		case err = <-p.protoErr:
+			reason = discReasonForError(err)
+			break loop
+		case reason = <-p.disc:
+			break loop
+		}
+	}
+
+	// wait for read loop to return.
+	close(readNext)
+	<-readErr
+	// tell the remote end to disconnect
+	done := make(chan struct{})
+	go func() {
+		p.conn.SetDeadline(time.Now().Add(disconnectGracePeriod))
+		p.writeMsg(NewMsg(discMsg, reason), disconnectGracePeriod)
+		io.Copy(ioutil.Discard, p.conn)
+		close(done)
+	}()
+	select {
+	case <-done:
+	case <-time.After(disconnectGracePeriod):
+	}
+	return reason, err
+}
+
+func (p *Peer) readLoop(msgc chan<- Msg, errc chan<- error, unblock <-chan bool) {
+	for _ = range unblock {
+		p.conn.SetReadDeadline(time.Now().Add(msgReadTimeout))
+		if msg, err := readMsg(p.bufconn); err != nil {
+			errc <- err
+		} else {
+			msgc <- msg
+		}
+	}
+	close(errc)
+}
+
+func (p *Peer) dispatch(msg Msg, protoDone chan struct{}) (wait bool, err error) {
+	proto, err := p.getProto(msg.Code)
+	if err != nil {
+		return false, err
+	}
+	if msg.Size <= wholePayloadSize {
+		// optimization: msg is small enough, read all
+		// of it and move on to the next message
+		buf, err := ioutil.ReadAll(msg.Payload)
+		if err != nil {
+			return false, err
+		}
+		msg.Payload = bytes.NewReader(buf)
+		proto.in <- msg
+	} else {
+		wait = true
+		pr := &eofSignal{msg.Payload, int64(msg.Size), protoDone}
+		msg.Payload = pr
+		proto.in <- msg
+	}
+	return wait, nil
+}
+
+func (p *Peer) startBaseProtocol() {
+	p.runlock.Lock()
+	defer p.runlock.Unlock()
+	p.running[""] = p.startProto(0, Protocol{
+		Length: baseProtocolLength,
+		Run:    runBaseProtocol,
+	})
+}
+
+// startProtocols starts matching named subprotocols.
+func (p *Peer) startSubprotocols(caps []Cap) {
+	sort.Sort(capsByName(caps))
+
+	p.runlock.Lock()
+	defer p.runlock.Unlock()
+	offset := baseProtocolLength
+outer:
+	for _, cap := range caps {
+		for _, proto := range p.protocols {
+			if proto.Name == cap.Name &&
+				proto.Version == cap.Version &&
+				p.running[cap.Name] == nil {
+				p.running[cap.Name] = p.startProto(offset, proto)
+				offset += proto.Length
+				continue outer
+			}
+		}
+	}
+}
+
+func (p *Peer) startProto(offset uint64, impl Protocol) *proto {
+	rw := &proto{
+		in:      make(chan Msg),
+		offset:  offset,
+		maxcode: impl.Length,
+		peer:    p,
+	}
+	p.protoWG.Add(1)
+	go func() {
+		err := impl.Run(p, rw)
+		if err == nil {
+			p.Infof("protocol %q returned", impl.Name)
+			err = newPeerError(errMisc, "protocol returned")
+		} else {
+			p.Errorf("protocol %q error: %v\n", impl.Name, err)
+		}
+		select {
+		case p.protoErr <- err:
+		case <-p.closed:
+		}
+		p.protoWG.Done()
+	}()
+	return rw
+}
+
+// getProto finds the protocol responsible for handling
+// the given message code.
+func (p *Peer) getProto(code uint64) (*proto, error) {
+	p.runlock.RLock()
+	defer p.runlock.RUnlock()
+	for _, proto := range p.running {
+		if code >= proto.offset && code < proto.offset+proto.maxcode {
+			return proto, nil
+		}
+	}
+	return nil, newPeerError(errInvalidMsgCode, "%d", code)
+}
+
+func (p *Peer) closeProtocols() {
+	p.runlock.RLock()
+	for _, p := range p.running {
+		close(p.in)
+	}
+	p.runlock.RUnlock()
+	p.protoWG.Wait()
+}
+
+// writeProtoMsg sends the given message on behalf of the given named protocol.
+func (p *Peer) writeProtoMsg(protoName string, msg Msg) error {
+	p.runlock.RLock()
+	proto, ok := p.running[protoName]
+	p.runlock.RUnlock()
+	if !ok {
+		return fmt.Errorf("protocol %s not handled by peer", protoName)
+	}
+	if msg.Code >= proto.maxcode {
+		return newPeerError(errInvalidMsgCode, "code %x is out of range for protocol %q", msg.Code, protoName)
+	}
+	msg.Code += proto.offset
+	return p.writeMsg(msg, msgWriteTimeout)
+}
+
+// writeMsg writes a message to the connection.
+func (p *Peer) writeMsg(msg Msg, timeout time.Duration) error {
+	p.writeMu.Lock()
+	defer p.writeMu.Unlock()
+	p.conn.SetWriteDeadline(time.Now().Add(timeout))
+	if err := writeMsg(p.bufconn, msg); err != nil {
+		return newPeerError(errWrite, "%v", err)
+	}
+	return p.bufconn.Flush()
+}
+
+type proto struct {
+	name            string
+	in              chan Msg
+	maxcode, offset uint64
+	peer            *Peer
+}
+
+func (rw *proto) WriteMsg(msg Msg) error {
+	if msg.Code >= rw.maxcode {
+		return newPeerError(errInvalidMsgCode, "not handled")
+	}
+	msg.Code += rw.offset
+	return rw.peer.writeMsg(msg, msgWriteTimeout)
+}
+
+func (rw *proto) EncodeMsg(code uint64, data ...interface{}) error {
+	return rw.WriteMsg(NewMsg(code, data))
+}
+
+func (rw *proto) ReadMsg() (Msg, error) {
+	msg, ok := <-rw.in
+	if !ok {
+		return msg, io.EOF
+	}
+	msg.Code -= rw.offset
+	return msg, nil
+}
+
+// eofSignal wraps a reader with eof signaling. the eof channel is
+// closed when the wrapped reader returns an error or when count bytes
+// have been read.
+//
+type eofSignal struct {
+	wrapped io.Reader
+	count   int64
+	eof     chan<- struct{}
+}
+
+// note: when using eofSignal to detect whether a message payload
+// has been read, Read might not be called for zero sized messages.
+
+func (r *eofSignal) Read(buf []byte) (int, error) {
+	n, err := r.wrapped.Read(buf)
+	r.count -= int64(n)
+	if (err != nil || r.count <= 0) && r.eof != nil {
+		r.eof <- struct{}{} // tell Peer that msg has been consumed
+		r.eof = nil
+	}
+	return n, err
+}
diff --git a/p2p/peer_error.go b/p2p/peer_error.go
new file mode 100644
index 0000000000000000000000000000000000000000..0eb7ec838d4535ba8977fd00567e712c180dd847
--- /dev/null
+++ b/p2p/peer_error.go
@@ -0,0 +1,133 @@
+package p2p
+
+import (
+	"fmt"
+)
+
+const (
+	errMagicTokenMismatch = iota
+	errRead
+	errWrite
+	errMisc
+	errInvalidMsgCode
+	errInvalidMsg
+	errP2PVersionMismatch
+	errPubkeyMissing
+	errPubkeyInvalid
+	errPubkeyForbidden
+	errProtocolBreach
+	errPingTimeout
+	errInvalidNetworkId
+	errInvalidProtocolVersion
+)
+
+var errorToString = map[int]string{
+	errMagicTokenMismatch:     "Magic token mismatch",
+	errRead:                   "Read error",
+	errWrite:                  "Write error",
+	errMisc:                   "Misc error",
+	errInvalidMsgCode:         "Invalid message code",
+	errInvalidMsg:             "Invalid message",
+	errP2PVersionMismatch:     "P2P Version Mismatch",
+	errPubkeyMissing:          "Public key missing",
+	errPubkeyInvalid:          "Public key invalid",
+	errPubkeyForbidden:        "Public key forbidden",
+	errProtocolBreach:         "Protocol Breach",
+	errPingTimeout:            "Ping timeout",
+	errInvalidNetworkId:       "Invalid network id",
+	errInvalidProtocolVersion: "Invalid protocol version",
+}
+
+type peerError struct {
+	Code    int
+	message string
+}
+
+func newPeerError(code int, format string, v ...interface{}) *peerError {
+	desc, ok := errorToString[code]
+	if !ok {
+		panic("invalid error code")
+	}
+	err := &peerError{code, desc}
+	if format != "" {
+		err.message += ": " + fmt.Sprintf(format, v...)
+	}
+	return err
+}
+
+func (self *peerError) Error() string {
+	return self.message
+}
+
+type DiscReason byte
+
+const (
+	DiscRequested           DiscReason = 0x00
+	DiscNetworkError                   = 0x01
+	DiscProtocolError                  = 0x02
+	DiscUselessPeer                    = 0x03
+	DiscTooManyPeers                   = 0x04
+	DiscAlreadyConnected               = 0x05
+	DiscIncompatibleVersion            = 0x06
+	DiscInvalidIdentity                = 0x07
+	DiscQuitting                       = 0x08
+	DiscUnexpectedIdentity             = 0x09
+	DiscSelf                           = 0x0a
+	DiscReadTimeout                    = 0x0b
+	DiscSubprotocolError               = 0x10
+)
+
+var discReasonToString = [DiscSubprotocolError + 1]string{
+	DiscRequested:           "Disconnect requested",
+	DiscNetworkError:        "Network error",
+	DiscProtocolError:       "Breach of protocol",
+	DiscUselessPeer:         "Useless peer",
+	DiscTooManyPeers:        "Too many peers",
+	DiscAlreadyConnected:    "Already connected",
+	DiscIncompatibleVersion: "Incompatible P2P protocol version",
+	DiscInvalidIdentity:     "Invalid node identity",
+	DiscQuitting:            "Client quitting",
+	DiscUnexpectedIdentity:  "Unexpected identity",
+	DiscSelf:                "Connected to self",
+	DiscReadTimeout:         "Read timeout",
+	DiscSubprotocolError:    "Subprotocol error",
+}
+
+func (d DiscReason) String() string {
+	if len(discReasonToString) < int(d) {
+		return fmt.Sprintf("Unknown Reason(%d)", d)
+	}
+	return discReasonToString[d]
+}
+
+type discRequestedError DiscReason
+
+func (err discRequestedError) Error() string {
+	return fmt.Sprintf("disconnect requested: %v", DiscReason(err))
+}
+
+func discReasonForError(err error) DiscReason {
+	if reason, ok := err.(discRequestedError); ok {
+		return DiscReason(reason)
+	}
+	peerError, ok := err.(*peerError)
+	if !ok {
+		return DiscSubprotocolError
+	}
+	switch peerError.Code {
+	case errP2PVersionMismatch:
+		return DiscIncompatibleVersion
+	case errPubkeyMissing, errPubkeyInvalid:
+		return DiscInvalidIdentity
+	case errPubkeyForbidden:
+		return DiscUselessPeer
+	case errInvalidMsgCode, errMagicTokenMismatch, errProtocolBreach:
+		return DiscProtocolError
+	case errPingTimeout:
+		return DiscReadTimeout
+	case errRead, errWrite, errMisc:
+		return DiscNetworkError
+	default:
+		return DiscSubprotocolError
+	}
+}
diff --git a/p2p/peer_test.go b/p2p/peer_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..f7759786ef21c25e9e7ccc6345a98c1e37d1f890
--- /dev/null
+++ b/p2p/peer_test.go
@@ -0,0 +1,295 @@
+package p2p
+
+import (
+	"bufio"
+	"bytes"
+	"encoding/hex"
+	"io"
+	"io/ioutil"
+	"net"
+	"reflect"
+	"testing"
+	"time"
+)
+
+var discard = Protocol{
+	Name:   "discard",
+	Length: 1,
+	Run: func(p *Peer, rw MsgReadWriter) error {
+		for {
+			msg, err := rw.ReadMsg()
+			if err != nil {
+				return err
+			}
+			if err = msg.Discard(); err != nil {
+				return err
+			}
+		}
+	},
+}
+
+func testPeer(protos []Protocol) (net.Conn, *Peer, <-chan error) {
+	conn1, conn2 := net.Pipe()
+	id := NewSimpleClientIdentity("test", "0", "0", "public key")
+	peer := newPeer(conn1, protos, nil)
+	peer.ourID = id
+	peer.pubkeyHook = func(*peerAddr) error { return nil }
+	errc := make(chan error, 1)
+	go func() {
+		_, err := peer.loop()
+		errc <- err
+	}()
+	return conn2, peer, errc
+}
+
+func TestPeerProtoReadMsg(t *testing.T) {
+	defer testlog(t).detach()
+
+	done := make(chan struct{})
+	proto := Protocol{
+		Name:   "a",
+		Length: 5,
+		Run: func(peer *Peer, rw MsgReadWriter) error {
+			msg, err := rw.ReadMsg()
+			if err != nil {
+				t.Errorf("read error: %v", err)
+			}
+			if msg.Code != 2 {
+				t.Errorf("incorrect msg code %d relayed to protocol", msg.Code)
+			}
+			data, err := ioutil.ReadAll(msg.Payload)
+			if err != nil {
+				t.Errorf("payload read error: %v", err)
+			}
+			expdata, _ := hex.DecodeString("0183303030")
+			if !bytes.Equal(expdata, data) {
+				t.Errorf("incorrect msg data %x", data)
+			}
+			close(done)
+			return nil
+		},
+	}
+
+	net, peer, errc := testPeer([]Protocol{proto})
+	defer net.Close()
+	peer.startSubprotocols([]Cap{proto.cap()})
+
+	writeMsg(net, NewMsg(18, 1, "000"))
+	select {
+	case <-done:
+	case err := <-errc:
+		t.Errorf("peer returned: %v", err)
+	case <-time.After(2 * time.Second):
+		t.Errorf("receive timeout")
+	}
+}
+
+func TestPeerProtoReadLargeMsg(t *testing.T) {
+	defer testlog(t).detach()
+
+	msgsize := uint32(10 * 1024 * 1024)
+	done := make(chan struct{})
+	proto := Protocol{
+		Name:   "a",
+		Length: 5,
+		Run: func(peer *Peer, rw MsgReadWriter) error {
+			msg, err := rw.ReadMsg()
+			if err != nil {
+				t.Errorf("read error: %v", err)
+			}
+			if msg.Size != msgsize+4 {
+				t.Errorf("incorrect msg.Size, got %d, expected %d", msg.Size, msgsize)
+			}
+			msg.Discard()
+			close(done)
+			return nil
+		},
+	}
+
+	net, peer, errc := testPeer([]Protocol{proto})
+	defer net.Close()
+	peer.startSubprotocols([]Cap{proto.cap()})
+
+	writeMsg(net, NewMsg(18, make([]byte, msgsize)))
+	select {
+	case <-done:
+	case err := <-errc:
+		t.Errorf("peer returned: %v", err)
+	case <-time.After(2 * time.Second):
+		t.Errorf("receive timeout")
+	}
+}
+
+func TestPeerProtoEncodeMsg(t *testing.T) {
+	defer testlog(t).detach()
+
+	proto := Protocol{
+		Name:   "a",
+		Length: 2,
+		Run: func(peer *Peer, rw MsgReadWriter) error {
+			if err := rw.EncodeMsg(2); err == nil {
+				t.Error("expected error for out-of-range msg code, got nil")
+			}
+			if err := rw.EncodeMsg(1); err != nil {
+				t.Errorf("write error: %v", err)
+			}
+			return nil
+		},
+	}
+	net, peer, _ := testPeer([]Protocol{proto})
+	defer net.Close()
+	peer.startSubprotocols([]Cap{proto.cap()})
+
+	bufr := bufio.NewReader(net)
+	msg, err := readMsg(bufr)
+	if err != nil {
+		t.Errorf("read error: %v", err)
+	}
+	if msg.Code != 17 {
+		t.Errorf("incorrect message code: got %d, expected %d", msg.Code, 17)
+	}
+}
+
+func TestPeerWrite(t *testing.T) {
+	defer testlog(t).detach()
+
+	net, peer, peerErr := testPeer([]Protocol{discard})
+	defer net.Close()
+	peer.startSubprotocols([]Cap{discard.cap()})
+
+	// test write errors
+	if err := peer.writeProtoMsg("b", NewMsg(3)); err == nil {
+		t.Errorf("expected error for unknown protocol, got nil")
+	}
+	if err := peer.writeProtoMsg("discard", NewMsg(8)); err == nil {
+		t.Errorf("expected error for out-of-range msg code, got nil")
+	} else if perr, ok := err.(*peerError); !ok || perr.Code != errInvalidMsgCode {
+		t.Errorf("wrong error for out-of-range msg code, got %#v", err)
+	}
+
+	// setup for reading the message on the other end
+	read := make(chan struct{})
+	go func() {
+		bufr := bufio.NewReader(net)
+		msg, err := readMsg(bufr)
+		if err != nil {
+			t.Errorf("read error: %v", err)
+		} else if msg.Code != 16 {
+			t.Errorf("wrong code, got %d, expected %d", msg.Code, 16)
+		}
+		msg.Discard()
+		close(read)
+	}()
+
+	// test succcessful write
+	if err := peer.writeProtoMsg("discard", NewMsg(0)); err != nil {
+		t.Errorf("expect no error for known protocol: %v", err)
+	}
+	select {
+	case <-read:
+	case err := <-peerErr:
+		t.Fatalf("peer stopped: %v", err)
+	}
+}
+
+func TestPeerActivity(t *testing.T) {
+	// shorten inactivityTimeout while this test is running
+	oldT := inactivityTimeout
+	defer func() { inactivityTimeout = oldT }()
+	inactivityTimeout = 20 * time.Millisecond
+
+	net, peer, peerErr := testPeer([]Protocol{discard})
+	defer net.Close()
+	peer.startSubprotocols([]Cap{discard.cap()})
+
+	sub := peer.activity.Subscribe(time.Time{})
+	defer sub.Unsubscribe()
+
+	for i := 0; i < 6; i++ {
+		writeMsg(net, NewMsg(16))
+		select {
+		case <-sub.Chan():
+		case <-time.After(inactivityTimeout / 2):
+			t.Fatal("no event within ", inactivityTimeout/2)
+		case err := <-peerErr:
+			t.Fatal("peer error", err)
+		}
+	}
+
+	select {
+	case <-time.After(inactivityTimeout * 2):
+	case <-sub.Chan():
+		t.Fatal("got activity event while connection was inactive")
+	case err := <-peerErr:
+		t.Fatal("peer error", err)
+	}
+}
+
+func TestNewPeer(t *testing.T) {
+	id := NewSimpleClientIdentity("clientid", "version", "customid", "pubkey")
+	caps := []Cap{{"foo", 2}, {"bar", 3}}
+	p := NewPeer(id, caps)
+	if !reflect.DeepEqual(p.Caps(), caps) {
+		t.Errorf("Caps mismatch: got %v, expected %v", p.Caps(), caps)
+	}
+	if p.Identity() != id {
+		t.Errorf("Identity mismatch: got %v, expected %v", p.Identity(), id)
+	}
+	// Should not hang.
+	p.Disconnect(DiscAlreadyConnected)
+}
+
+func TestEOFSignal(t *testing.T) {
+	rb := make([]byte, 10)
+
+	// empty reader
+	eof := make(chan struct{}, 1)
+	sig := &eofSignal{new(bytes.Buffer), 0, eof}
+	if n, err := sig.Read(rb); n != 0 || err != io.EOF {
+		t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
+	}
+	select {
+	case <-eof:
+	default:
+		t.Error("EOF chan not signaled")
+	}
+
+	// count before error
+	eof = make(chan struct{}, 1)
+	sig = &eofSignal{bytes.NewBufferString("aaaaaaaa"), 4, eof}
+	if n, err := sig.Read(rb); n != 8 || err != nil {
+		t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
+	}
+	select {
+	case <-eof:
+	default:
+		t.Error("EOF chan not signaled")
+	}
+
+	// error before count
+	eof = make(chan struct{}, 1)
+	sig = &eofSignal{bytes.NewBufferString("aaaa"), 999, eof}
+	if n, err := sig.Read(rb); n != 4 || err != nil {
+		t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
+	}
+	if n, err := sig.Read(rb); n != 0 || err != io.EOF {
+		t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
+	}
+	select {
+	case <-eof:
+	default:
+		t.Error("EOF chan not signaled")
+	}
+
+	// no signal if neither occurs
+	eof = make(chan struct{}, 1)
+	sig = &eofSignal{bytes.NewBufferString("aaaaaaaaaaaaaaaaaaaaa"), 999, eof}
+	if n, err := sig.Read(rb); n != 10 || err != nil {
+		t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
+	}
+	select {
+	case <-eof:
+		t.Error("unexpected EOF signal")
+	default:
+	}
+}
diff --git a/p2p/protocol.go b/p2p/protocol.go
new file mode 100644
index 0000000000000000000000000000000000000000..3f52205f596a28441ec4364b9364dbf40f5307f9
--- /dev/null
+++ b/p2p/protocol.go
@@ -0,0 +1,294 @@
+package p2p
+
+import (
+	"bytes"
+	"time"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+// Protocol represents a P2P subprotocol implementation.
+type Protocol struct {
+	// Name should contain the official protocol name,
+	// often a three-letter word.
+	Name string
+
+	// Version should contain the version number of the protocol.
+	Version uint
+
+	// Length should contain the number of message codes used
+	// by the protocol.
+	Length uint64
+
+	// Run is called in a new groutine when the protocol has been
+	// negotiated with a peer. It should read and write messages from
+	// rw. The Payload for each message must be fully consumed.
+	//
+	// The peer connection is closed when Start returns. It should return
+	// any protocol-level error (such as an I/O error) that is
+	// encountered.
+	Run func(peer *Peer, rw MsgReadWriter) error
+}
+
+func (p Protocol) cap() Cap {
+	return Cap{p.Name, p.Version}
+}
+
+const (
+	baseProtocolVersion    = 2
+	baseProtocolLength     = uint64(16)
+	baseProtocolMaxMsgSize = 10 * 1024 * 1024
+)
+
+const (
+	// devp2p message codes
+	handshakeMsg = 0x00
+	discMsg      = 0x01
+	pingMsg      = 0x02
+	pongMsg      = 0x03
+	getPeersMsg  = 0x04
+	peersMsg     = 0x05
+)
+
+// handshake is the structure of a handshake list.
+type handshake struct {
+	Version    uint64
+	ID         string
+	Caps       []Cap
+	ListenPort uint64
+	NodeID     []byte
+}
+
+func (h *handshake) String() string {
+	return h.ID
+}
+func (h *handshake) Pubkey() []byte {
+	return h.NodeID
+}
+
+// Cap is the structure of a peer capability.
+type Cap struct {
+	Name    string
+	Version uint
+}
+
+func (cap Cap) RlpData() interface{} {
+	return []interface{}{cap.Name, cap.Version}
+}
+
+type capsByName []Cap
+
+func (cs capsByName) Len() int           { return len(cs) }
+func (cs capsByName) Less(i, j int) bool { return cs[i].Name < cs[j].Name }
+func (cs capsByName) Swap(i, j int)      { cs[i], cs[j] = cs[j], cs[i] }
+
+type baseProtocol struct {
+	rw   MsgReadWriter
+	peer *Peer
+}
+
+func runBaseProtocol(peer *Peer, rw MsgReadWriter) error {
+	bp := &baseProtocol{rw, peer}
+	if err := bp.doHandshake(rw); err != nil {
+		return err
+	}
+	// run main loop
+	quit := make(chan error, 1)
+	go func() {
+		for {
+			if err := bp.handle(rw); err != nil {
+				quit <- err
+				break
+			}
+		}
+	}()
+	return bp.loop(quit)
+}
+
+var pingTimeout = 2 * time.Second
+
+func (bp *baseProtocol) loop(quit <-chan error) error {
+	ping := time.NewTimer(pingTimeout)
+	activity := bp.peer.activity.Subscribe(time.Time{})
+	lastActive := time.Time{}
+	defer ping.Stop()
+	defer activity.Unsubscribe()
+
+	getPeersTick := time.NewTicker(10 * time.Second)
+	defer getPeersTick.Stop()
+	err := bp.rw.EncodeMsg(getPeersMsg)
+
+	for err == nil {
+		select {
+		case err = <-quit:
+			return err
+		case <-getPeersTick.C:
+			err = bp.rw.EncodeMsg(getPeersMsg)
+		case event := <-activity.Chan():
+			ping.Reset(pingTimeout)
+			lastActive = event.(time.Time)
+		case t := <-ping.C:
+			if lastActive.Add(pingTimeout * 2).Before(t) {
+				err = newPeerError(errPingTimeout, "")
+			} else if lastActive.Add(pingTimeout).Before(t) {
+				err = bp.rw.EncodeMsg(pingMsg)
+			}
+		}
+	}
+	return err
+}
+
+func (bp *baseProtocol) handle(rw MsgReadWriter) error {
+	msg, err := rw.ReadMsg()
+	if err != nil {
+		return err
+	}
+	if msg.Size > baseProtocolMaxMsgSize {
+		return newPeerError(errMisc, "message too big")
+	}
+	// make sure that the payload has been fully consumed
+	defer msg.Discard()
+
+	switch msg.Code {
+	case handshakeMsg:
+		return newPeerError(errProtocolBreach, "extra handshake received")
+
+	case discMsg:
+		var reason [1]DiscReason
+		if err := msg.Decode(&reason); err != nil {
+			return err
+		}
+		return discRequestedError(reason[0])
+
+	case pingMsg:
+		return bp.rw.EncodeMsg(pongMsg)
+
+	case pongMsg:
+
+	case getPeersMsg:
+		peers := bp.peerList()
+		// this is dangerous. the spec says that we should _delay_
+		// sending the response if no new information is available.
+		// this means that would need to send a response later when
+		// new peers become available.
+		//
+		// TODO: add event mechanism to notify baseProtocol for new peers
+		if len(peers) > 0 {
+			return bp.rw.EncodeMsg(peersMsg, peers)
+		}
+
+	case peersMsg:
+		var peers []*peerAddr
+		if err := msg.Decode(&peers); err != nil {
+			return err
+		}
+		for _, addr := range peers {
+			bp.peer.Debugf("received peer suggestion: %v", addr)
+			bp.peer.newPeerAddr <- addr
+		}
+
+	default:
+		return newPeerError(errInvalidMsgCode, "unknown message code %v", msg.Code)
+	}
+	return nil
+}
+
+func (bp *baseProtocol) doHandshake(rw MsgReadWriter) error {
+	// send our handshake
+	if err := rw.WriteMsg(bp.handshakeMsg()); err != nil {
+		return err
+	}
+
+	// read and handle remote handshake
+	msg, err := rw.ReadMsg()
+	if err != nil {
+		return err
+	}
+	if msg.Code != handshakeMsg {
+		return newPeerError(errProtocolBreach, "first message must be handshake, got %x", msg.Code)
+	}
+	if msg.Size > baseProtocolMaxMsgSize {
+		return newPeerError(errMisc, "message too big")
+	}
+
+	var hs handshake
+	if err := msg.Decode(&hs); err != nil {
+		return err
+	}
+
+	// validate handshake info
+	if hs.Version != baseProtocolVersion {
+		return newPeerError(errP2PVersionMismatch, "Require protocol %d, received %d\n",
+			baseProtocolVersion, hs.Version)
+	}
+	if len(hs.NodeID) == 0 {
+		return newPeerError(errPubkeyMissing, "")
+	}
+	if len(hs.NodeID) != 64 {
+		return newPeerError(errPubkeyInvalid, "require 512 bit, got %v", len(hs.NodeID)*8)
+	}
+	if da := bp.peer.dialAddr; da != nil {
+		// verify that the peer we wanted to connect to
+		// actually holds the target public key.
+		if da.Pubkey != nil && !bytes.Equal(da.Pubkey, hs.NodeID) {
+			return newPeerError(errPubkeyForbidden, "dial address pubkey mismatch")
+		}
+	}
+	pa := newPeerAddr(bp.peer.conn.RemoteAddr(), hs.NodeID)
+	if err := bp.peer.pubkeyHook(pa); err != nil {
+		return newPeerError(errPubkeyForbidden, "%v", err)
+	}
+
+	// TODO: remove Caps with empty name
+
+	var addr *peerAddr
+	if hs.ListenPort != 0 {
+		addr = newPeerAddr(bp.peer.conn.RemoteAddr(), hs.NodeID)
+		addr.Port = hs.ListenPort
+	}
+	bp.peer.setHandshakeInfo(&hs, addr, hs.Caps)
+	bp.peer.startSubprotocols(hs.Caps)
+	return nil
+}
+
+func (bp *baseProtocol) handshakeMsg() Msg {
+	var (
+		port uint64
+		caps []interface{}
+	)
+	if bp.peer.ourListenAddr != nil {
+		port = bp.peer.ourListenAddr.Port
+	}
+	for _, proto := range bp.peer.protocols {
+		caps = append(caps, proto.cap())
+	}
+	return NewMsg(handshakeMsg,
+		baseProtocolVersion,
+		bp.peer.ourID.String(),
+		caps,
+		port,
+		bp.peer.ourID.Pubkey()[1:],
+	)
+}
+
+func (bp *baseProtocol) peerList() []ethutil.RlpEncodable {
+	peers := bp.peer.otherPeers()
+	ds := make([]ethutil.RlpEncodable, 0, len(peers))
+	for _, p := range peers {
+		p.infolock.Lock()
+		addr := p.listenAddr
+		p.infolock.Unlock()
+		// filter out this peer and peers that are not listening or
+		// have not completed the handshake.
+		// TODO: track previously sent peers and exclude them as well.
+		if p == bp.peer || addr == nil {
+			continue
+		}
+		ds = append(ds, addr)
+	}
+	ourAddr := bp.peer.ourListenAddr
+	if ourAddr != nil && !ourAddr.IP.IsLoopback() && !ourAddr.IP.IsUnspecified() {
+		ds = append(ds, ourAddr)
+	}
+	return ds
+}
diff --git a/p2p/protocol_test.go b/p2p/protocol_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..65f26fb12da601dd5078fcb69d0b93e52c20243f
--- /dev/null
+++ b/p2p/protocol_test.go
@@ -0,0 +1,58 @@
+package p2p
+
+import (
+	"fmt"
+	"testing"
+)
+
+func TestBaseProtocolDisconnect(t *testing.T) {
+	peer := NewPeer(NewSimpleClientIdentity("p1", "", "", "foo"), nil)
+	peer.ourID = NewSimpleClientIdentity("p2", "", "", "bar")
+	peer.pubkeyHook = func(*peerAddr) error { return nil }
+
+	rw1, rw2 := MsgPipe()
+	done := make(chan struct{})
+	go func() {
+		if err := expectMsg(rw2, handshakeMsg); err != nil {
+			t.Error(err)
+		}
+		err := rw2.EncodeMsg(handshakeMsg,
+			baseProtocolVersion,
+			"",
+			[]interface{}{},
+			0,
+			make([]byte, 64),
+		)
+		if err != nil {
+			t.Error(err)
+		}
+		if err := expectMsg(rw2, getPeersMsg); err != nil {
+			t.Error(err)
+		}
+		if err := rw2.EncodeMsg(discMsg, DiscQuitting); err != nil {
+			t.Error(err)
+		}
+		close(done)
+	}()
+
+	if err := runBaseProtocol(peer, rw1); err == nil {
+		t.Errorf("base protocol returned without error")
+	} else if reason, ok := err.(discRequestedError); !ok || reason != DiscQuitting {
+		t.Errorf("base protocol returned wrong error: %v", err)
+	}
+	<-done
+}
+
+func expectMsg(r MsgReader, code uint64) error {
+	msg, err := r.ReadMsg()
+	if err != nil {
+		return err
+	}
+	if err := msg.Discard(); err != nil {
+		return err
+	}
+	if msg.Code != code {
+		return fmt.Errorf("wrong message code: got %d, expected %d", msg.Code, code)
+	}
+	return nil
+}
diff --git a/p2p/server.go b/p2p/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..8a608756665c49a1e66959581220537b2e4017bc
--- /dev/null
+++ b/p2p/server.go
@@ -0,0 +1,467 @@
+package p2p
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"net"
+	"sync"
+	"time"
+
+	"github.com/ethereum/go-ethereum/logger"
+)
+
+const (
+	outboundAddressPoolSize   = 500
+	defaultDialTimeout        = 10 * time.Second
+	portMappingUpdateInterval = 15 * time.Minute
+	portMappingTimeout        = 20 * time.Minute
+)
+
+var srvlog = logger.NewLogger("P2P Server")
+
+// Server manages all peer connections.
+//
+// The fields of Server are used as configuration parameters.
+// You should set them before starting the Server. Fields may not be
+// modified while the server is running.
+type Server struct {
+	// This field must be set to a valid client identity.
+	Identity ClientIdentity
+
+	// MaxPeers is the maximum number of peers that can be
+	// connected. It must be greater than zero.
+	MaxPeers int
+
+	// Protocols should contain the protocols supported
+	// by the server. Matching protocols are launched for
+	// each peer.
+	Protocols []Protocol
+
+	// If Blacklist is set to a non-nil value, the given Blacklist
+	// is used to verify peer connections.
+	Blacklist Blacklist
+
+	// If ListenAddr is set to a non-nil address, the server
+	// will listen for incoming connections.
+	//
+	// If the port is zero, the operating system will pick a port. The
+	// ListenAddr field will be updated with the actual address when
+	// the server is started.
+	ListenAddr string
+
+	// If set to a non-nil value, the given NAT port mapper
+	// is used to make the listening port available to the
+	// Internet.
+	NAT NAT
+
+	// If Dialer is set to a non-nil value, the given Dialer
+	// is used to dial outbound peer connections.
+	Dialer *net.Dialer
+
+	// If NoDial is true, the server will not dial any peers.
+	NoDial bool
+
+	// Hook for testing. This is useful because we can inhibit
+	// the whole protocol stack.
+	newPeerFunc peerFunc
+
+	lock      sync.RWMutex
+	running   bool
+	listener  net.Listener
+	laddr     *net.TCPAddr // real listen addr
+	peers     []*Peer
+	peerSlots chan int
+	peerCount int
+
+	quit           chan struct{}
+	wg             sync.WaitGroup
+	peerConnect    chan *peerAddr
+	peerDisconnect chan *Peer
+}
+
+// NAT is implemented by NAT traversal methods.
+type NAT interface {
+	GetExternalAddress() (net.IP, error)
+	AddPortMapping(protocol string, extport, intport int, name string, lifetime time.Duration) error
+	DeletePortMapping(protocol string, extport, intport int) error
+
+	// Should return name of the method.
+	String() string
+}
+
+type peerFunc func(srv *Server, c net.Conn, dialAddr *peerAddr) *Peer
+
+// Peers returns all connected peers.
+func (srv *Server) Peers() (peers []*Peer) {
+	srv.lock.RLock()
+	defer srv.lock.RUnlock()
+	for _, peer := range srv.peers {
+		if peer != nil {
+			peers = append(peers, peer)
+		}
+	}
+	return
+}
+
+// PeerCount returns the number of connected peers.
+func (srv *Server) PeerCount() int {
+	srv.lock.RLock()
+	defer srv.lock.RUnlock()
+	return srv.peerCount
+}
+
+// SuggestPeer injects an address into the outbound address pool.
+func (srv *Server) SuggestPeer(ip net.IP, port int, nodeID []byte) {
+	select {
+	case srv.peerConnect <- &peerAddr{ip, uint64(port), nodeID}:
+	default: // don't block
+	}
+}
+
+// Broadcast sends an RLP-encoded message to all connected peers.
+// This method is deprecated and will be removed later.
+func (srv *Server) Broadcast(protocol string, code uint64, data ...interface{}) {
+	var payload []byte
+	if data != nil {
+		payload = encodePayload(data...)
+	}
+	srv.lock.RLock()
+	defer srv.lock.RUnlock()
+	for _, peer := range srv.peers {
+		if peer != nil {
+			var msg = Msg{Code: code}
+			if data != nil {
+				msg.Payload = bytes.NewReader(payload)
+				msg.Size = uint32(len(payload))
+			}
+			peer.writeProtoMsg(protocol, msg)
+		}
+	}
+}
+
+// Start starts running the server.
+// Servers can be re-used and started again after stopping.
+func (srv *Server) Start() (err error) {
+	srv.lock.Lock()
+	defer srv.lock.Unlock()
+	if srv.running {
+		return errors.New("server already running")
+	}
+	srvlog.Infoln("Starting Server")
+
+	// initialize fields
+	if srv.Identity == nil {
+		return fmt.Errorf("Server.Identity must be set to a non-nil identity")
+	}
+	if srv.MaxPeers <= 0 {
+		return fmt.Errorf("Server.MaxPeers must be > 0")
+	}
+	srv.quit = make(chan struct{})
+	srv.peers = make([]*Peer, srv.MaxPeers)
+	srv.peerSlots = make(chan int, srv.MaxPeers)
+	srv.peerConnect = make(chan *peerAddr, outboundAddressPoolSize)
+	srv.peerDisconnect = make(chan *Peer)
+	if srv.newPeerFunc == nil {
+		srv.newPeerFunc = newServerPeer
+	}
+	if srv.Blacklist == nil {
+		srv.Blacklist = NewBlacklist()
+	}
+	if srv.Dialer == nil {
+		srv.Dialer = &net.Dialer{Timeout: defaultDialTimeout}
+	}
+
+	if srv.ListenAddr != "" {
+		if err := srv.startListening(); err != nil {
+			return err
+		}
+	}
+	if !srv.NoDial {
+		srv.wg.Add(1)
+		go srv.dialLoop()
+	}
+	if srv.NoDial && srv.ListenAddr == "" {
+		srvlog.Warnln("I will be kind-of useless, neither dialing nor listening.")
+	}
+
+	// make all slots available
+	for i := range srv.peers {
+		srv.peerSlots <- i
+	}
+	// note: discLoop is not part of WaitGroup
+	go srv.discLoop()
+	srv.running = true
+	return nil
+}
+
+func (srv *Server) startListening() error {
+	listener, err := net.Listen("tcp", srv.ListenAddr)
+	if err != nil {
+		return err
+	}
+	srv.ListenAddr = listener.Addr().String()
+	srv.laddr = listener.Addr().(*net.TCPAddr)
+	srv.listener = listener
+	srv.wg.Add(1)
+	go srv.listenLoop()
+	if !srv.laddr.IP.IsLoopback() && srv.NAT != nil {
+		srv.wg.Add(1)
+		go srv.natLoop(srv.laddr.Port)
+	}
+	return nil
+}
+
+// Stop terminates the server and all active peer connections.
+// It blocks until all active connections have been closed.
+func (srv *Server) Stop() {
+	srv.lock.Lock()
+	if !srv.running {
+		srv.lock.Unlock()
+		return
+	}
+	srv.running = false
+	srv.lock.Unlock()
+
+	srvlog.Infoln("Stopping server")
+	if srv.listener != nil {
+		// this unblocks listener Accept
+		srv.listener.Close()
+	}
+	close(srv.quit)
+	for _, peer := range srv.Peers() {
+		peer.Disconnect(DiscQuitting)
+	}
+	srv.wg.Wait()
+
+	// wait till they actually disconnect
+	// this is checked by claiming all peerSlots.
+	// slots become available as the peers disconnect.
+	for i := 0; i < cap(srv.peerSlots); i++ {
+		<-srv.peerSlots
+	}
+	// terminate discLoop
+	close(srv.peerDisconnect)
+}
+
+func (srv *Server) discLoop() {
+	for peer := range srv.peerDisconnect {
+		// peer has just disconnected. free up its slot.
+		srvlog.Infof("%v is gone", peer)
+		srv.peerSlots <- peer.slot
+		srv.lock.Lock()
+		srv.peers[peer.slot] = nil
+		srv.lock.Unlock()
+	}
+}
+
+// main loop for adding connections via listening
+func (srv *Server) listenLoop() {
+	defer srv.wg.Done()
+
+	srvlog.Infoln("Listening on", srv.listener.Addr())
+	for {
+		select {
+		case slot := <-srv.peerSlots:
+			conn, err := srv.listener.Accept()
+			if err != nil {
+				srv.peerSlots <- slot
+				return
+			}
+			srvlog.Debugf("Accepted conn %v (slot %d)\n", conn.RemoteAddr(), slot)
+			srv.addPeer(conn, nil, slot)
+		case <-srv.quit:
+			return
+		}
+	}
+}
+
+func (srv *Server) natLoop(port int) {
+	defer srv.wg.Done()
+	for {
+		srv.updatePortMapping(port)
+		select {
+		case <-time.After(portMappingUpdateInterval):
+			// one more round
+		case <-srv.quit:
+			srv.removePortMapping(port)
+			return
+		}
+	}
+}
+
+func (srv *Server) updatePortMapping(port int) {
+	srvlog.Infoln("Attempting to map port", port, "with", srv.NAT)
+	err := srv.NAT.AddPortMapping("tcp", port, port, "ethereum p2p", portMappingTimeout)
+	if err != nil {
+		srvlog.Errorln("Port mapping error:", err)
+		return
+	}
+	extip, err := srv.NAT.GetExternalAddress()
+	if err != nil {
+		srvlog.Errorln("Error getting external IP:", err)
+		return
+	}
+	srv.lock.Lock()
+	extaddr := *(srv.listener.Addr().(*net.TCPAddr))
+	extaddr.IP = extip
+	srvlog.Infoln("Mapped port, external addr is", &extaddr)
+	srv.laddr = &extaddr
+	srv.lock.Unlock()
+}
+
+func (srv *Server) removePortMapping(port int) {
+	srvlog.Infoln("Removing port mapping for", port, "with", srv.NAT)
+	srv.NAT.DeletePortMapping("tcp", port, port)
+}
+
+func (srv *Server) dialLoop() {
+	defer srv.wg.Done()
+	var (
+		suggest chan *peerAddr
+		slot    *int
+		slots   = srv.peerSlots
+	)
+	for {
+		select {
+		case i := <-slots:
+			// we need a peer in slot i, slot reserved
+			slot = &i
+			// now we can watch for candidate peers in the next loop
+			suggest = srv.peerConnect
+			// do not consume more until candidate peer is found
+			slots = nil
+
+		case desc := <-suggest:
+			// candidate peer found, will dial out asyncronously
+			// if connection fails slot will be released
+			go srv.dialPeer(desc, *slot)
+			// we can watch if more peers needed in the next loop
+			slots = srv.peerSlots
+			// until then we dont care about candidate peers
+			suggest = nil
+
+		case <-srv.quit:
+			// give back the currently reserved slot
+			if slot != nil {
+				srv.peerSlots <- *slot
+			}
+			return
+		}
+	}
+}
+
+// connect to peer via dial out
+func (srv *Server) dialPeer(desc *peerAddr, slot int) {
+	srvlog.Debugf("Dialing %v (slot %d)\n", desc, slot)
+	conn, err := srv.Dialer.Dial(desc.Network(), desc.String())
+	if err != nil {
+		srvlog.Errorf("Dial error: %v", err)
+		srv.peerSlots <- slot
+		return
+	}
+	go srv.addPeer(conn, desc, slot)
+}
+
+// creates the new peer object and inserts it into its slot
+func (srv *Server) addPeer(conn net.Conn, desc *peerAddr, slot int) *Peer {
+	srv.lock.Lock()
+	defer srv.lock.Unlock()
+	if !srv.running {
+		conn.Close()
+		srv.peerSlots <- slot // release slot
+		return nil
+	}
+	peer := srv.newPeerFunc(srv, conn, desc)
+	peer.slot = slot
+	srv.peers[slot] = peer
+	srv.peerCount++
+	go func() { peer.loop(); srv.peerDisconnect <- peer }()
+	return peer
+}
+
+// removes peer: sending disconnect msg, stop peer, remove rom list/table, release slot
+func (srv *Server) removePeer(peer *Peer) {
+	srv.lock.Lock()
+	defer srv.lock.Unlock()
+	srvlog.Debugf("Removing peer %v %v (slot %v)\n", peer, peer.slot)
+	if srv.peers[peer.slot] != peer {
+		srvlog.Warnln("Invalid peer to remove:", peer)
+		return
+	}
+	// remove from list and index
+	srv.peerCount--
+	srv.peers[peer.slot] = nil
+	// release slot to signal need for a new peer, last!
+	srv.peerSlots <- peer.slot
+}
+
+func (srv *Server) verifyPeer(addr *peerAddr) error {
+	if srv.Blacklist.Exists(addr.Pubkey) {
+		return errors.New("blacklisted")
+	}
+	if bytes.Equal(srv.Identity.Pubkey()[1:], addr.Pubkey) {
+		return newPeerError(errPubkeyForbidden, "not allowed to connect to srv")
+	}
+	srv.lock.RLock()
+	defer srv.lock.RUnlock()
+	for _, peer := range srv.peers {
+		if peer != nil {
+			id := peer.Identity()
+			if id != nil && bytes.Equal(id.Pubkey(), addr.Pubkey) {
+				return errors.New("already connected")
+			}
+		}
+	}
+	return nil
+}
+
+type Blacklist interface {
+	Get([]byte) (bool, error)
+	Put([]byte) error
+	Delete([]byte) error
+	Exists(pubkey []byte) (ok bool)
+}
+
+type BlacklistMap struct {
+	blacklist map[string]bool
+	lock      sync.RWMutex
+}
+
+func NewBlacklist() *BlacklistMap {
+	return &BlacklistMap{
+		blacklist: make(map[string]bool),
+	}
+}
+
+func (self *BlacklistMap) Get(pubkey []byte) (bool, error) {
+	self.lock.RLock()
+	defer self.lock.RUnlock()
+	v, ok := self.blacklist[string(pubkey)]
+	var err error
+	if !ok {
+		err = fmt.Errorf("not found")
+	}
+	return v, err
+}
+
+func (self *BlacklistMap) Exists(pubkey []byte) (ok bool) {
+	self.lock.RLock()
+	defer self.lock.RUnlock()
+	_, ok = self.blacklist[string(pubkey)]
+	return
+}
+
+func (self *BlacklistMap) Put(pubkey []byte) error {
+	self.lock.RLock()
+	defer self.lock.RUnlock()
+	self.blacklist[string(pubkey)] = true
+	return nil
+}
+
+func (self *BlacklistMap) Delete(pubkey []byte) error {
+	self.lock.RLock()
+	defer self.lock.RUnlock()
+	delete(self.blacklist, string(pubkey))
+	return nil
+}
diff --git a/p2p/server_test.go b/p2p/server_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..5c0d08d398b35b8b1c94799b6a2604c7a50e926b
--- /dev/null
+++ b/p2p/server_test.go
@@ -0,0 +1,161 @@
+package p2p
+
+import (
+	"bytes"
+	"io"
+	"net"
+	"sync"
+	"testing"
+	"time"
+)
+
+func startTestServer(t *testing.T, pf peerFunc) *Server {
+	server := &Server{
+		Identity:    NewSimpleClientIdentity("clientIdentifier", "version", "customIdentifier", "pubkey"),
+		MaxPeers:    10,
+		ListenAddr:  "127.0.0.1:0",
+		newPeerFunc: pf,
+	}
+	if err := server.Start(); err != nil {
+		t.Fatalf("Could not start server: %v", err)
+	}
+	return server
+}
+
+func TestServerListen(t *testing.T) {
+	defer testlog(t).detach()
+
+	// start the test server
+	connected := make(chan *Peer)
+	srv := startTestServer(t, func(srv *Server, conn net.Conn, dialAddr *peerAddr) *Peer {
+		if conn == nil {
+			t.Error("peer func called with nil conn")
+		}
+		if dialAddr != nil {
+			t.Error("peer func called with non-nil dialAddr")
+		}
+		peer := newPeer(conn, nil, dialAddr)
+		connected <- peer
+		return peer
+	})
+	defer close(connected)
+	defer srv.Stop()
+
+	// dial the test server
+	conn, err := net.DialTimeout("tcp", srv.ListenAddr, 5*time.Second)
+	if err != nil {
+		t.Fatalf("could not dial: %v", err)
+	}
+	defer conn.Close()
+
+	select {
+	case peer := <-connected:
+		if peer.conn.LocalAddr().String() != conn.RemoteAddr().String() {
+			t.Errorf("peer started with wrong conn: got %v, want %v",
+				peer.conn.LocalAddr(), conn.RemoteAddr())
+		}
+	case <-time.After(1 * time.Second):
+		t.Error("server did not accept within one second")
+	}
+}
+
+func TestServerDial(t *testing.T) {
+	defer testlog(t).detach()
+
+	// run a fake TCP server to handle the connection.
+	listener, err := net.Listen("tcp", "127.0.0.1:0")
+	if err != nil {
+		t.Fatalf("could not setup listener: %v")
+	}
+	defer listener.Close()
+	accepted := make(chan net.Conn)
+	go func() {
+		conn, err := listener.Accept()
+		if err != nil {
+			t.Error("acccept error:", err)
+		}
+		conn.Close()
+		accepted <- conn
+	}()
+
+	// start the test server
+	connected := make(chan *Peer)
+	srv := startTestServer(t, func(srv *Server, conn net.Conn, dialAddr *peerAddr) *Peer {
+		if conn == nil {
+			t.Error("peer func called with nil conn")
+		}
+		peer := newPeer(conn, nil, dialAddr)
+		connected <- peer
+		return peer
+	})
+	defer close(connected)
+	defer srv.Stop()
+
+	// tell the server to connect.
+	connAddr := newPeerAddr(listener.Addr(), nil)
+	srv.peerConnect <- connAddr
+
+	select {
+	case conn := <-accepted:
+		select {
+		case peer := <-connected:
+			if peer.conn.RemoteAddr().String() != conn.LocalAddr().String() {
+				t.Errorf("peer started with wrong conn: got %v, want %v",
+					peer.conn.RemoteAddr(), conn.LocalAddr())
+			}
+			if peer.dialAddr != connAddr {
+				t.Errorf("peer started with wrong dialAddr: got %v, want %v",
+					peer.dialAddr, connAddr)
+			}
+		case <-time.After(1 * time.Second):
+			t.Error("server did not launch peer within one second")
+		}
+
+	case <-time.After(1 * time.Second):
+		t.Error("server did not connect within one second")
+	}
+}
+
+func TestServerBroadcast(t *testing.T) {
+	defer testlog(t).detach()
+	var connected sync.WaitGroup
+	srv := startTestServer(t, func(srv *Server, c net.Conn, dialAddr *peerAddr) *Peer {
+		peer := newPeer(c, []Protocol{discard}, dialAddr)
+		peer.startSubprotocols([]Cap{discard.cap()})
+		connected.Done()
+		return peer
+	})
+	defer srv.Stop()
+
+	// dial a bunch of conns
+	var conns = make([]net.Conn, 8)
+	connected.Add(len(conns))
+	deadline := time.Now().Add(3 * time.Second)
+	dialer := &net.Dialer{Deadline: deadline}
+	for i := range conns {
+		conn, err := dialer.Dial("tcp", srv.ListenAddr)
+		if err != nil {
+			t.Fatalf("conn %d: dial error: %v", i, err)
+		}
+		defer conn.Close()
+		conn.SetDeadline(deadline)
+		conns[i] = conn
+	}
+	connected.Wait()
+
+	// broadcast one message
+	srv.Broadcast("discard", 0, "foo")
+	goldbuf := new(bytes.Buffer)
+	writeMsg(goldbuf, NewMsg(16, "foo"))
+	golden := goldbuf.Bytes()
+
+	// check that the message has been written everywhere
+	for i, conn := range conns {
+		buf := make([]byte, len(golden))
+		if _, err := io.ReadFull(conn, buf); err != nil {
+			t.Errorf("conn %d: read error: %v", i, err)
+		} else if !bytes.Equal(buf, golden) {
+			t.Errorf("conn %d: msg mismatch\ngot:  %x\nwant: %x", i, buf, golden)
+		}
+	}
+}
diff --git a/p2p/testlog_test.go b/p2p/testlog_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..951d43243e42a190487647a81a7ec225ddcea10b
--- /dev/null
+++ b/p2p/testlog_test.go
@@ -0,0 +1,28 @@
+package p2p
+
+import (
+	"testing"
+
+	"github.com/ethereum/go-ethereum/logger"
+)
+
+type testLogger struct{ t *testing.T }
+
+func testlog(t *testing.T) testLogger {
+	logger.Reset()
+	l := testLogger{t}
+	logger.AddLogSystem(l)
+	return l
+}
+
+func (testLogger) GetLogLevel() logger.LogLevel { return logger.DebugLevel }
+func (testLogger) SetLogLevel(logger.LogLevel)  {}
+
+func (l testLogger) LogPrint(level logger.LogLevel, msg string) {
+	l.t.Logf("%s", msg)
+}
+
+func (testLogger) detach() {
+	logger.Flush()
+	logger.Reset()
+}
diff --git a/p2p/testpoc7.go b/p2p/testpoc7.go
new file mode 100644
index 0000000000000000000000000000000000000000..c0cc5c54458a2d5623452193ef3431800e67ca74
--- /dev/null
+++ b/p2p/testpoc7.go
@@ -0,0 +1,40 @@
+// +build none
+
+package main
+
+import (
+	"fmt"
+	"log"
+	"net"
+	"os"
+
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/p2p"
+	"github.com/obscuren/secp256k1-go"
+)
+
+func main() {
+	logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.DebugLevel))
+
+	pub, _ := secp256k1.GenerateKeyPair()
+	srv := p2p.Server{
+		MaxPeers:   10,
+		Identity:   p2p.NewSimpleClientIdentity("test", "1.0", "", string(pub)),
+		ListenAddr: ":30303",
+		NAT:        p2p.PMP(net.ParseIP("10.0.0.1")),
+	}
+	if err := srv.Start(); err != nil {
+		fmt.Println("could not start server:", err)
+		os.Exit(1)
+	}
+
+	// add seed peers
+	seed, err := net.ResolveTCPAddr("tcp", "poc-7.ethdev.com:30303")
+	if err != nil {
+		fmt.Println("couldn't resolve:", err)
+		os.Exit(1)
+	}
+	srv.SuggestPeer(seed.IP, seed.Port, nil)
+
+	select {}
+}
diff --git a/peer.go b/peer.go
new file mode 100644
index 0000000000000000000000000000000000000000..13f0239d45dd476eda70a13c199df210eb9c2828
--- /dev/null
+++ b/peer.go
@@ -0,0 +1,881 @@
+package eth
+
+import (
+	"bytes"
+	"container/list"
+	"fmt"
+	"math"
+	"math/big"
+	"net"
+	"strconv"
+	"strings"
+	"sync/atomic"
+	"time"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/wire"
+)
+
+var peerlogger = logger.NewLogger("PEER")
+
+const (
+	// The size of the output buffer for writing messages
+	outputBufferSize = 50
+	// Current protocol version
+	ProtocolVersion = 49
+	// Current P2P version
+	P2PVersion = 2
+	// Ethereum network version
+	NetVersion = 0
+	// Interval for ping/pong message
+	pingPongTimer = 2 * time.Second
+)
+
+type DiscReason byte
+
+const (
+	// Values are given explicitly instead of by iota because these values are
+	// defined by the wire protocol spec; it is easier for humans to ensure
+	// correctness when values are explicit.
+	DiscRequested DiscReason = iota
+	DiscReTcpSysErr
+	DiscBadProto
+	DiscBadPeer
+	DiscTooManyPeers
+	DiscConnDup
+	DiscGenesisErr
+	DiscProtoErr
+	DiscQuitting
+)
+
+var discReasonToString = []string{
+	"requested",
+	"TCP sys error",
+	"bad protocol",
+	"useless peer",
+	"too many peers",
+	"already connected",
+	"wrong genesis block",
+	"incompatible network",
+	"quitting",
+}
+
+func (d DiscReason) String() string {
+	if len(discReasonToString) < int(d) {
+		return "Unknown"
+	}
+
+	return discReasonToString[d]
+}
+
+// Peer capabilities
+type Caps byte
+
+const (
+	CapPeerDiscTy Caps = 1 << iota
+	CapTxTy
+	CapChainTy
+
+	CapDefault = CapChainTy | CapTxTy | CapPeerDiscTy
+)
+
+var capsToString = map[Caps]string{
+	CapPeerDiscTy: "Peer discovery",
+	CapTxTy:       "Transaction relaying",
+	CapChainTy:    "Block chain relaying",
+}
+
+func (c Caps) IsCap(cap Caps) bool {
+	return c&cap > 0
+}
+
+func (c Caps) String() string {
+	var caps []string
+	if c.IsCap(CapPeerDiscTy) {
+		caps = append(caps, capsToString[CapPeerDiscTy])
+	}
+	if c.IsCap(CapChainTy) {
+		caps = append(caps, capsToString[CapChainTy])
+	}
+	if c.IsCap(CapTxTy) {
+		caps = append(caps, capsToString[CapTxTy])
+	}
+
+	return strings.Join(caps, " | ")
+}
+
+type Peer struct {
+	// Ethereum interface
+	ethereum *Ethereum
+	// Net connection
+	conn net.Conn
+	// Output queue which is used to communicate and handle messages
+	outputQueue chan *wire.Msg
+	// Quit channel
+	quit chan bool
+	// Determines whether it's an inbound or outbound peer
+	inbound bool
+	// Flag for checking the peer's connectivity state
+	connected  int32
+	disconnect int32
+	// Last known message send
+	lastSend time.Time
+	// Indicated whether a verack has been send or not
+	// This flag is used by writeMessage to check if messages are allowed
+	// to be send or not. If no version is known all messages are ignored.
+	versionKnown bool
+	statusKnown  bool
+
+	// Last received pong message
+	lastPong            int64
+	lastBlockReceived   time.Time
+	doneFetchingHashes  bool
+	lastHashAt          time.Time
+	lastHashRequestedAt time.Time
+
+	host             []byte
+	port             uint16
+	caps             Caps
+	td               *big.Int
+	bestHash         []byte
+	lastReceivedHash []byte
+	requestedHashes  [][]byte
+
+	// This peer's public key
+	pubkey []byte
+
+	// Indicated whether the node is catching up or not
+	catchingUp      bool
+	diverted        bool
+	blocksRequested int
+
+	version string
+
+	// We use this to give some kind of pingtime to a node, not very accurate, could be improved.
+	pingTime      time.Duration
+	pingStartTime time.Time
+
+	lastRequestedBlock *types.Block
+
+	protocolCaps *ethutil.Value
+}
+
+func NewPeer(conn net.Conn, ethereum *Ethereum, inbound bool) *Peer {
+	pubkey := ethereum.KeyManager().PublicKey()[1:]
+
+	return &Peer{
+		outputQueue:        make(chan *wire.Msg, outputBufferSize),
+		quit:               make(chan bool),
+		ethereum:           ethereum,
+		conn:               conn,
+		inbound:            inbound,
+		disconnect:         0,
+		connected:          1,
+		port:               30303,
+		pubkey:             pubkey,
+		blocksRequested:    10,
+		caps:               ethereum.ServerCaps(),
+		version:            ethereum.ClientIdentity().String(),
+		protocolCaps:       ethutil.NewValue(nil),
+		td:                 big.NewInt(0),
+		doneFetchingHashes: true,
+	}
+}
+
+func NewOutboundPeer(addr string, ethereum *Ethereum, caps Caps) *Peer {
+	p := &Peer{
+		outputQueue:        make(chan *wire.Msg, outputBufferSize),
+		quit:               make(chan bool),
+		ethereum:           ethereum,
+		inbound:            false,
+		connected:          0,
+		disconnect:         0,
+		port:               30303,
+		caps:               caps,
+		version:            ethereum.ClientIdentity().String(),
+		protocolCaps:       ethutil.NewValue(nil),
+		td:                 big.NewInt(0),
+		doneFetchingHashes: true,
+	}
+
+	// Set up the connection in another goroutine so we don't block the main thread
+	go func() {
+		conn, err := p.Connect(addr)
+		if err != nil {
+			//peerlogger.Debugln("Connection to peer failed. Giving up.", err)
+			p.Stop()
+			return
+		}
+		p.conn = conn
+
+		// Atomically set the connection state
+		atomic.StoreInt32(&p.connected, 1)
+		atomic.StoreInt32(&p.disconnect, 0)
+
+		p.Start()
+	}()
+
+	return p
+}
+
+func (self *Peer) Connect(addr string) (conn net.Conn, err error) {
+	const maxTries = 3
+	for attempts := 0; attempts < maxTries; attempts++ {
+		conn, err = net.DialTimeout("tcp", addr, 10*time.Second)
+		if err != nil {
+			time.Sleep(time.Duration(attempts*20) * time.Second)
+			continue
+		}
+
+		// Success
+		return
+	}
+
+	return
+}
+
+// Getters
+func (p *Peer) PingTime() string {
+	return p.pingTime.String()
+}
+func (p *Peer) Inbound() bool {
+	return p.inbound
+}
+func (p *Peer) LastSend() time.Time {
+	return p.lastSend
+}
+func (p *Peer) LastPong() int64 {
+	return p.lastPong
+}
+func (p *Peer) Host() []byte {
+	return p.host
+}
+func (p *Peer) Port() uint16 {
+	return p.port
+}
+func (p *Peer) Version() string {
+	return p.version
+}
+func (p *Peer) Connected() *int32 {
+	return &p.connected
+}
+
+// Setters
+func (p *Peer) SetVersion(version string) {
+	p.version = version
+}
+
+// Outputs any RLP encoded data to the peer
+func (p *Peer) QueueMessage(msg *wire.Msg) {
+	if atomic.LoadInt32(&p.connected) != 1 {
+		return
+	}
+	p.outputQueue <- msg
+}
+
+func (p *Peer) writeMessage(msg *wire.Msg) {
+	// Ignore the write if we're not connected
+	if atomic.LoadInt32(&p.connected) != 1 {
+		return
+	}
+
+	if !p.versionKnown {
+		switch msg.Type {
+		case wire.MsgHandshakeTy: // Ok
+		default: // Anything but ack is allowed
+			return
+		}
+	} else {
+		/*
+			if !p.statusKnown {
+				switch msg.Type {
+				case wire.MsgStatusTy: // Ok
+				default: // Anything but ack is allowed
+					return
+				}
+			}
+		*/
+	}
+
+	peerlogger.DebugDetailf("(%v) <= %v\n", p.conn.RemoteAddr(), formatMessage(msg))
+
+	err := wire.WriteMessage(p.conn, msg)
+	if err != nil {
+		peerlogger.Debugln(" Can't send message:", err)
+		// Stop the client if there was an error writing to it
+		p.Stop()
+		return
+	}
+}
+
+// Outbound message handler. Outbound messages are handled here
+func (p *Peer) HandleOutbound() {
+	// The ping timer. Makes sure that every 2 minutes a ping is send to the peer
+	pingTimer := time.NewTicker(pingPongTimer)
+	serviceTimer := time.NewTicker(10 * time.Second)
+
+out:
+	for {
+	skip:
+		select {
+		// Main message queue. All outbound messages are processed through here
+		case msg := <-p.outputQueue:
+			if !p.statusKnown {
+				switch msg.Type {
+				case wire.MsgTxTy, wire.MsgGetBlockHashesTy, wire.MsgBlockHashesTy, wire.MsgGetBlocksTy, wire.MsgBlockTy:
+					break skip
+				}
+			}
+
+			switch msg.Type {
+			case wire.MsgGetBlockHashesTy:
+				p.lastHashRequestedAt = time.Now()
+			}
+
+			p.writeMessage(msg)
+			p.lastSend = time.Now()
+
+		// Ping timer
+		case <-pingTimer.C:
+			p.writeMessage(wire.NewMessage(wire.MsgPingTy, ""))
+			p.pingStartTime = time.Now()
+
+		// Service timer takes care of peer broadcasting, transaction
+		// posting or block posting
+		case <-serviceTimer.C:
+			p.QueueMessage(wire.NewMessage(wire.MsgGetPeersTy, ""))
+
+		case <-p.quit:
+			// Break out of the for loop if a quit message is posted
+			break out
+		}
+	}
+
+clean:
+	// This loop is for draining the output queue and anybody waiting for us
+	for {
+		select {
+		case <-p.outputQueue:
+			// TODO
+		default:
+			break clean
+		}
+	}
+}
+
+func formatMessage(msg *wire.Msg) (ret string) {
+	ret = fmt.Sprintf("%v %v", msg.Type, msg.Data)
+
+	/*
+		XXX Commented out because I need the log level here to determine
+		if i should or shouldn't generate this message
+	*/
+	/*
+		switch msg.Type {
+		case wire.MsgPeersTy:
+			ret += fmt.Sprintf("(%d entries)", msg.Data.Len())
+		case wire.MsgBlockTy:
+			b1, b2 := chain.NewBlockFromRlpValue(msg.Data.Get(0)), ethchain.NewBlockFromRlpValue(msg.Data.Get(msg.Data.Len()-1))
+			ret += fmt.Sprintf("(%d entries) %x - %x", msg.Data.Len(), b1.Hash()[0:4], b2.Hash()[0:4])
+		case wire.MsgBlockHashesTy:
+			h1, h2 := msg.Data.Get(0).Bytes(), msg.Data.Get(msg.Data.Len()-1).Bytes()
+			ret += fmt.Sprintf("(%d entries) %x - %x", msg.Data.Len(), h1, h2)
+		}
+	*/
+
+	return
+}
+
+// Inbound handler. Inbound messages are received here and passed to the appropriate methods
+func (p *Peer) HandleInbound() {
+	for atomic.LoadInt32(&p.disconnect) == 0 {
+
+		// HMM?
+		time.Sleep(50 * time.Millisecond)
+		// Wait for a message from the peer
+		msgs, err := wire.ReadMessages(p.conn)
+		if err != nil {
+			peerlogger.Debugln(err)
+		}
+		for _, msg := range msgs {
+			peerlogger.DebugDetailf("(%v) => %v\n", p.conn.RemoteAddr(), formatMessage(msg))
+
+			switch msg.Type {
+			case wire.MsgHandshakeTy:
+				// Version message
+				p.handleHandshake(msg)
+
+				//if p.caps.IsCap(CapPeerDiscTy) {
+				p.QueueMessage(wire.NewMessage(wire.MsgGetPeersTy, ""))
+				//}
+
+			case wire.MsgDiscTy:
+				p.Stop()
+				peerlogger.Infoln("Disconnect peer: ", DiscReason(msg.Data.Get(0).Uint()))
+			case wire.MsgPingTy:
+				// Respond back with pong
+				p.QueueMessage(wire.NewMessage(wire.MsgPongTy, ""))
+			case wire.MsgPongTy:
+				// If we received a pong back from a peer we set the
+				// last pong so the peer handler knows this peer is still
+				// active.
+				p.lastPong = time.Now().Unix()
+				p.pingTime = time.Since(p.pingStartTime)
+			case wire.MsgTxTy:
+				// If the message was a transaction queue the transaction
+				// in the TxPool where it will undergo validation and
+				// processing when a new block is found
+				for i := 0; i < msg.Data.Len(); i++ {
+					tx := types.NewTransactionFromValue(msg.Data.Get(i))
+					err := p.ethereum.TxPool().Add(tx)
+					if err != nil {
+						peerlogger.Infoln(err)
+					} else {
+						peerlogger.Infof("tx OK (%x)\n", tx.Hash()[0:4])
+					}
+				}
+			case wire.MsgGetPeersTy:
+				// Peer asked for list of connected peers
+				//p.pushPeers()
+			case wire.MsgPeersTy:
+				// Received a list of peers (probably because MsgGetPeersTy was send)
+				data := msg.Data
+				// Create new list of possible peers for the ethereum to process
+				peers := make([]string, data.Len())
+				// Parse each possible peer
+				for i := 0; i < data.Len(); i++ {
+					value := data.Get(i)
+					peers[i] = unpackAddr(value.Get(0), value.Get(1).Uint())
+				}
+
+				// Connect to the list of peers
+				p.ethereum.ProcessPeerList(peers)
+
+			case wire.MsgStatusTy:
+				// Handle peer's status msg
+				p.handleStatus(msg)
+			}
+
+			// TMP
+			if p.statusKnown {
+				switch msg.Type {
+
+				case wire.MsgGetBlockHashesTy:
+					if msg.Data.Len() < 2 {
+						peerlogger.Debugln("err: argument length invalid ", msg.Data.Len())
+					}
+
+					hash := msg.Data.Get(0).Bytes()
+					amount := msg.Data.Get(1).Uint()
+
+					hashes := p.ethereum.ChainManager().GetChainHashesFromHash(hash, amount)
+
+					p.QueueMessage(wire.NewMessage(wire.MsgBlockHashesTy, ethutil.ByteSliceToInterface(hashes)))
+
+				case wire.MsgGetBlocksTy:
+					// Limit to max 300 blocks
+					max := int(math.Min(float64(msg.Data.Len()), 300.0))
+					var blocks []interface{}
+
+					for i := 0; i < max; i++ {
+						hash := msg.Data.Get(i).Bytes()
+						block := p.ethereum.ChainManager().GetBlock(hash)
+						if block != nil {
+							blocks = append(blocks, block.Value().Raw())
+						}
+					}
+
+					p.QueueMessage(wire.NewMessage(wire.MsgBlockTy, blocks))
+
+				case wire.MsgBlockHashesTy:
+					p.catchingUp = true
+
+					blockPool := p.ethereum.blockPool
+
+					foundCommonHash := false
+					p.lastHashAt = time.Now()
+
+					it := msg.Data.NewIterator()
+					for it.Next() {
+						hash := it.Value().Bytes()
+						p.lastReceivedHash = hash
+
+						if blockPool.HasCommonHash(hash) {
+							foundCommonHash = true
+
+							break
+						}
+
+						blockPool.AddHash(hash, p)
+					}
+
+					if !foundCommonHash {
+						p.FetchHashes()
+					} else {
+						peerlogger.Infof("Found common hash (%x...)\n", p.lastReceivedHash[0:4])
+						p.doneFetchingHashes = true
+					}
+
+				case wire.MsgBlockTy:
+					p.catchingUp = true
+
+					blockPool := p.ethereum.blockPool
+
+					it := msg.Data.NewIterator()
+					for it.Next() {
+						block := types.NewBlockFromRlpValue(it.Value())
+						blockPool.Add(block, p)
+
+						p.lastBlockReceived = time.Now()
+					}
+				case wire.MsgNewBlockTy:
+					var (
+						blockPool = p.ethereum.blockPool
+						block     = types.NewBlockFromRlpValue(msg.Data.Get(0))
+						td        = msg.Data.Get(1).BigInt()
+					)
+
+					if td.Cmp(blockPool.td) > 0 {
+						p.ethereum.blockPool.AddNew(block, p)
+					}
+				}
+
+			}
+		}
+	}
+
+	p.Stop()
+}
+
+func (self *Peer) FetchBlocks(hashes [][]byte) {
+	if len(hashes) > 0 {
+		peerlogger.Debugf("Fetching blocks (%d)\n", len(hashes))
+
+		self.QueueMessage(wire.NewMessage(wire.MsgGetBlocksTy, ethutil.ByteSliceToInterface(hashes)))
+	}
+}
+
+func (self *Peer) FetchHashes() bool {
+	blockPool := self.ethereum.blockPool
+
+	return blockPool.FetchHashes(self)
+}
+
+func (self *Peer) FetchingHashes() bool {
+	return !self.doneFetchingHashes
+}
+
+// General update method
+func (self *Peer) update() {
+	serviceTimer := time.NewTicker(100 * time.Millisecond)
+
+out:
+	for {
+		select {
+		case <-serviceTimer.C:
+			if self.IsCap("eth") {
+				var (
+					sinceBlock = time.Since(self.lastBlockReceived)
+				)
+
+				if sinceBlock > 5*time.Second {
+					self.catchingUp = false
+				}
+			}
+		case <-self.quit:
+			break out
+		}
+	}
+
+	serviceTimer.Stop()
+}
+
+func (p *Peer) Start() {
+	peerHost, peerPort, _ := net.SplitHostPort(p.conn.LocalAddr().String())
+	servHost, servPort, _ := net.SplitHostPort(p.conn.RemoteAddr().String())
+
+	if p.inbound {
+		p.host, p.port = packAddr(peerHost, peerPort)
+	} else {
+		p.host, p.port = packAddr(servHost, servPort)
+	}
+
+	err := p.pushHandshake()
+	if err != nil {
+		peerlogger.Debugln("Peer can't send outbound version ack", err)
+
+		p.Stop()
+
+		return
+	}
+
+	go p.HandleOutbound()
+	// Run the inbound handler in a new goroutine
+	go p.HandleInbound()
+	// Run the general update handler
+	go p.update()
+
+	// Wait a few seconds for startup and then ask for an initial ping
+	time.Sleep(2 * time.Second)
+	p.writeMessage(wire.NewMessage(wire.MsgPingTy, ""))
+	p.pingStartTime = time.Now()
+
+}
+
+func (p *Peer) Stop() {
+	p.StopWithReason(DiscRequested)
+}
+
+func (p *Peer) StopWithReason(reason DiscReason) {
+	if atomic.AddInt32(&p.disconnect, 1) != 1 {
+		return
+	}
+
+	// Pre-emptively remove the peer; don't wait for reaping. We already know it's dead if we are here
+	p.ethereum.RemovePeer(p)
+
+	close(p.quit)
+	if atomic.LoadInt32(&p.connected) != 0 {
+		p.writeMessage(wire.NewMessage(wire.MsgDiscTy, reason))
+		p.conn.Close()
+	}
+}
+
+func (p *Peer) peersMessage() *wire.Msg {
+	outPeers := make([]interface{}, len(p.ethereum.InOutPeers()))
+	// Serialise each peer
+	for i, peer := range p.ethereum.InOutPeers() {
+		// Don't return localhost as valid peer
+		if !net.ParseIP(peer.conn.RemoteAddr().String()).IsLoopback() {
+			outPeers[i] = peer.RlpData()
+		}
+	}
+
+	// Return the message to the peer with the known list of connected clients
+	return wire.NewMessage(wire.MsgPeersTy, outPeers)
+}
+
+// Pushes the list of outbound peers to the client when requested
+func (p *Peer) pushPeers() {
+	p.QueueMessage(p.peersMessage())
+}
+
+func (self *Peer) pushStatus() {
+	msg := wire.NewMessage(wire.MsgStatusTy, []interface{}{
+		uint32(ProtocolVersion),
+		uint32(NetVersion),
+		self.ethereum.ChainManager().Td(),
+		self.ethereum.ChainManager().CurrentBlock().Hash(),
+		self.ethereum.ChainManager().Genesis().Hash(),
+	})
+
+	self.QueueMessage(msg)
+}
+
+func (self *Peer) handleStatus(msg *wire.Msg) {
+	c := msg.Data
+
+	var (
+		//protoVersion = c.Get(0).Uint()
+		netVersion = c.Get(1).Uint()
+		td         = c.Get(2).BigInt()
+		bestHash   = c.Get(3).Bytes()
+		genesis    = c.Get(4).Bytes()
+	)
+
+	if bytes.Compare(self.ethereum.ChainManager().Genesis().Hash(), genesis) != 0 {
+		loggerger.Warnf("Invalid genisis hash %x. Disabling [eth]\n", genesis)
+		return
+	}
+
+	if netVersion != NetVersion {
+		loggerger.Warnf("Invalid network version %d. Disabling [eth]\n", netVersion)
+		return
+	}
+
+	/*
+		if protoVersion != ProtocolVersion {
+			loggerger.Warnf("Invalid protocol version %d. Disabling [eth]\n", protoVersion)
+			return
+		}
+	*/
+
+	// Get the td and last hash
+	self.td = td
+	self.bestHash = bestHash
+	self.lastReceivedHash = bestHash
+
+	self.statusKnown = true
+
+	// Compare the total TD with the blockchain TD. If remote is higher
+	// fetch hashes from highest TD node.
+	self.FetchHashes()
+
+	loggerger.Infof("Peer is [eth] capable. (TD = %v ~ %x)", self.td, self.bestHash)
+
+}
+
+func (p *Peer) pushHandshake() error {
+	pubkey := p.ethereum.KeyManager().PublicKey()
+	msg := wire.NewMessage(wire.MsgHandshakeTy, []interface{}{
+		P2PVersion, []byte(p.version), []interface{}{[]interface{}{"eth", ProtocolVersion}}, p.port, pubkey[1:],
+	})
+
+	p.QueueMessage(msg)
+
+	return nil
+}
+
+func (p *Peer) handleHandshake(msg *wire.Msg) {
+	c := msg.Data
+
+	var (
+		p2pVersion = c.Get(0).Uint()
+		clientId   = c.Get(1).Str()
+		caps       = c.Get(2)
+		port       = c.Get(3).Uint()
+		pub        = c.Get(4).Bytes()
+	)
+
+	// Check correctness of p2p protocol version
+	if p2pVersion != P2PVersion {
+		peerlogger.Debugf("Invalid P2P version. Require protocol %d, received %d\n", P2PVersion, p2pVersion)
+		p.Stop()
+		return
+	}
+
+	// Handle the pub key (validation, uniqueness)
+	if len(pub) == 0 {
+		peerlogger.Warnln("Pubkey required, not supplied in handshake.")
+		p.Stop()
+		return
+	}
+
+	// Self connect detection
+	pubkey := p.ethereum.KeyManager().PublicKey()
+	if bytes.Compare(pubkey[1:], pub) == 0 {
+		p.Stop()
+
+		return
+	}
+
+	// Check for blacklisting
+	for _, pk := range p.ethereum.blacklist {
+		if bytes.Compare(pk, pub) == 0 {
+			peerlogger.Debugf("Blacklisted peer tried to connect (%x...)\n", pubkey[0:4])
+			p.StopWithReason(DiscBadPeer)
+
+			return
+		}
+	}
+
+	usedPub := 0
+	// This peer is already added to the peerlist so we expect to find a double pubkey at least once
+	eachPeer(p.ethereum.Peers(), func(peer *Peer, e *list.Element) {
+		if bytes.Compare(pub, peer.pubkey) == 0 {
+			usedPub++
+		}
+	})
+
+	if usedPub > 0 {
+		peerlogger.Debugf("Pubkey %x found more then once. Already connected to client.", p.pubkey)
+		p.Stop()
+		return
+	}
+	p.pubkey = pub
+
+	// If this is an inbound connection send an ack back
+	if p.inbound {
+		p.port = uint16(port)
+	}
+
+	p.SetVersion(clientId)
+
+	p.versionKnown = true
+
+	p.ethereum.PushPeer(p)
+	p.ethereum.eventMux.Post(PeerListEvent{p.ethereum.Peers()})
+
+	p.protocolCaps = caps
+
+	it := caps.NewIterator()
+	var capsStrs []string
+	for it.Next() {
+		cap := it.Value().Get(0).Str()
+		ver := it.Value().Get(1).Uint()
+		switch cap {
+		case "eth":
+			if ver != ProtocolVersion {
+				loggerger.Warnf("Invalid protocol version %d. Disabling [eth]\n", ver)
+				continue
+			}
+			p.pushStatus()
+		}
+
+		capsStrs = append(capsStrs, fmt.Sprintf("%s/%d", cap, ver))
+	}
+
+	peerlogger.Infof("Added peer (%s) %d / %d (%v)\n", p.conn.RemoteAddr(), p.ethereum.Peers().Len(), p.ethereum.MaxPeers, capsStrs)
+
+	peerlogger.Debugln(p)
+}
+
+func (self *Peer) IsCap(cap string) bool {
+	capsIt := self.protocolCaps.NewIterator()
+	for capsIt.Next() {
+		if capsIt.Value().Str() == cap {
+			return true
+		}
+	}
+
+	return false
+}
+
+func (self *Peer) Caps() *ethutil.Value {
+	return self.protocolCaps
+}
+
+func (p *Peer) String() string {
+	var strBoundType string
+	if p.inbound {
+		strBoundType = "inbound"
+	} else {
+		strBoundType = "outbound"
+	}
+	var strConnectType string
+	if atomic.LoadInt32(&p.disconnect) == 0 {
+		strConnectType = "connected"
+	} else {
+		strConnectType = "disconnected"
+	}
+
+	return fmt.Sprintf("[%s] (%s) %v %s", strConnectType, strBoundType, p.conn.RemoteAddr(), p.version)
+
+}
+
+func (p *Peer) RlpData() []interface{} {
+	return []interface{}{p.host, p.port, p.pubkey}
+}
+
+func packAddr(address, _port string) (host []byte, port uint16) {
+	p, _ := strconv.Atoi(_port)
+	port = uint16(p)
+
+	h := net.ParseIP(address)
+	if ip := h.To4(); ip != nil {
+		host = []byte(ip)
+	} else {
+		host = []byte(h)
+	}
+
+	return
+}
+
+func unpackAddr(value *ethutil.Value, p uint64) string {
+	host, _ := net.IP(value.Bytes()).MarshalText()
+	prt := strconv.Itoa(int(p))
+
+	return net.JoinHostPort(string(host), prt)
+}
diff --git a/pow/ar/block.go b/pow/ar/block.go
new file mode 100644
index 0000000000000000000000000000000000000000..2124b53b4bc39a26ce57c160a01d0ef6ad1a0312
--- /dev/null
+++ b/pow/ar/block.go
@@ -0,0 +1,12 @@
+package ar
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type Block interface {
+	Trie() *trie.Trie
+	Diff() *big.Int
+}
diff --git a/pow/ar/ops.go b/pow/ar/ops.go
new file mode 100644
index 0000000000000000000000000000000000000000..3a099be0877cee62591ed262d98ca2b1bfd576ee
--- /dev/null
+++ b/pow/ar/ops.go
@@ -0,0 +1,54 @@
+package ar
+
+import "math/big"
+
+const lenops int64 = 9
+
+type OpsFunc func(a, b *big.Int) *big.Int
+
+var ops [lenops]OpsFunc
+
+func init() {
+	ops[0] = Add
+	ops[1] = Mul
+	ops[2] = Mod
+	ops[3] = Xor
+	ops[4] = And
+	ops[5] = Or
+	ops[6] = Sub1
+	ops[7] = XorSub
+	ops[8] = Rsh
+}
+
+func Add(x, y *big.Int) *big.Int {
+	return new(big.Int).Add(x, y)
+}
+func Mul(x, y *big.Int) *big.Int {
+	return new(big.Int).Mul(x, y)
+}
+func Mod(x, y *big.Int) *big.Int {
+	return new(big.Int).Mod(x, y)
+}
+func Xor(x, y *big.Int) *big.Int {
+	return new(big.Int).Xor(x, y)
+}
+func And(x, y *big.Int) *big.Int {
+	return new(big.Int).And(x, y)
+}
+func Or(x, y *big.Int) *big.Int {
+	return new(big.Int).Or(x, y)
+}
+func Sub1(x, y *big.Int) *big.Int {
+	a := big.NewInt(-1)
+	a.Sub(a, x)
+
+	return a
+}
+func XorSub(x, y *big.Int) *big.Int {
+	t := Sub1(x, nil)
+
+	return t.Xor(t, y)
+}
+func Rsh(x, y *big.Int) *big.Int {
+	return new(big.Int).Rsh(x, uint(y.Uint64()%64))
+}
diff --git a/pow/ar/pow.go b/pow/ar/pow.go
new file mode 100644
index 0000000000000000000000000000000000000000..8991a674ba46459fd12447fd20127acdbcb01331
--- /dev/null
+++ b/pow/ar/pow.go
@@ -0,0 +1,122 @@
+package ar
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type Entry struct {
+	op   OpsFunc
+	i, j *big.Int
+}
+
+type Tape struct {
+	tape  []Entry
+	block Block
+}
+
+func NewTape(block Block) *Tape {
+	return &Tape{nil, block}
+}
+
+func (self *Tape) gen(w, h int64, gen NumberGenerator) {
+	self.tape = nil
+
+	for v := int64(0); v < h; v++ {
+		op := ops[gen.rand64(lenops).Int64()]
+		r := gen.rand64(100).Uint64()
+
+		var j *big.Int
+		if r < 20 && v > 20 {
+			j = self.tape[len(self.tape)-1].i
+		} else {
+			j = gen.rand64(w)
+		}
+
+		i := gen.rand64(w)
+		self.tape = append(self.tape, Entry{op, i, j})
+	}
+}
+
+func (self *Tape) runTape(w, h int64, gen NumberGenerator) *big.Int {
+	var mem []*big.Int
+	for i := int64(0); i < w; i++ {
+		mem = append(mem, gen.rand(ethutil.BigPow(2, 64)))
+	}
+
+	set := func(i, j int) Entry {
+		entry := self.tape[i*100+j]
+		mem[entry.i.Uint64()] = entry.op(entry.i, entry.j)
+
+		return entry
+	}
+
+	dir := true
+	for i := 0; i < int(h)/100; i++ {
+		var entry Entry
+		if dir {
+			for j := 0; j < 100; j++ {
+				entry = set(i, j)
+			}
+		} else {
+			for j := 99; i >= 0; j-- {
+				entry = set(i, j)
+			}
+		}
+
+		t := mem[entry.i.Uint64()]
+		if big.NewInt(2).Cmp(new(big.Int).Mod(t, big.NewInt(37))) < 0 {
+			dir = !dir
+		}
+	}
+
+	return Sha3(mem)
+}
+
+func (self *Tape) Verify(header, nonce []byte) bool {
+	n := ethutil.BigD(nonce)
+
+	var w int64 = 10000
+	var h int64 = 150000
+	gen := Rnd(Sha3([]interface{}{header, new(big.Int).Div(n, big.NewInt(1000))}))
+	self.gen(w, h, gen)
+
+	gen = Rnd(Sha3([]interface{}{header, new(big.Int).Mod(n, big.NewInt(1000))}))
+	hash := self.runTape(w, h, gen)
+
+	it := self.block.Trie().Iterator()
+	next := it.Next(string(new(big.Int).Mod(hash, ethutil.BigPow(2, 160)).Bytes()))
+
+	req := ethutil.BigPow(2, 256)
+	req.Div(req, self.block.Diff())
+	return Sha3([]interface{}{hash, next}).Cmp(req) < 0
+}
+
+func (self *Tape) Run(header []byte) []byte {
+	nonce := big.NewInt(0)
+	var w int64 = 10000
+	var h int64 = 150000
+
+	req := ethutil.BigPow(2, 256)
+	req.Div(req, self.block.Diff())
+
+	for {
+		if new(big.Int).Mod(nonce, b(1000)).Cmp(b(0)) == 0 {
+			gen := Rnd(Sha3([]interface{}{header, new(big.Int).Div(nonce, big.NewInt(1000))}))
+			self.gen(w, h, gen)
+		}
+
+		gen := Rnd(Sha3([]interface{}{header, new(big.Int).Mod(nonce, big.NewInt(1000))}))
+		hash := self.runTape(w, h, gen)
+
+		it := self.block.Trie().Iterator()
+		next := it.Next(string(new(big.Int).Mod(hash, ethutil.BigPow(2, 160)).Bytes()))
+
+		if Sha3([]interface{}{hash, next}).Cmp(req) < 0 {
+			return nonce.Bytes()
+		} else {
+			nonce.Add(nonce, ethutil.Big1)
+		}
+	}
+}
diff --git a/pow/ar/pow_test.go b/pow/ar/pow_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b1ebf9281860d961cd3b553d92518c832f5c4d6f
--- /dev/null
+++ b/pow/ar/pow_test.go
@@ -0,0 +1,47 @@
+package ar
+
+import (
+	"fmt"
+	"math/big"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type TestBlock struct {
+	trie *trie.Trie
+}
+
+func NewTestBlock() *TestBlock {
+	db, _ := ethdb.NewMemDatabase()
+	return &TestBlock{
+		trie: trie.New(db, ""),
+	}
+}
+
+func (self *TestBlock) Diff() *big.Int {
+	return b(10)
+}
+
+func (self *TestBlock) Trie() *trie.Trie {
+	return self.trie
+}
+
+func (self *TestBlock) Hash() []byte {
+	a := make([]byte, 32)
+	a[0] = 10
+	a[1] = 2
+	return a
+}
+
+func TestPow(t *testing.T) {
+	entry := make([]byte, 32)
+	entry[0] = 255
+
+	block := NewTestBlock()
+
+	pow := NewTape(block)
+	nonce := pow.Run(block.Hash())
+	fmt.Println("Found nonce", nonce)
+}
diff --git a/pow/ar/rnd.go b/pow/ar/rnd.go
new file mode 100644
index 0000000000000000000000000000000000000000..c62f4e0622bc271857fa80957da5956f730adbd8
--- /dev/null
+++ b/pow/ar/rnd.go
@@ -0,0 +1,66 @@
+package ar
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+var b = big.NewInt
+
+type Node interface {
+	Big() *big.Int
+}
+
+type ByteNode []byte
+
+func (self ByteNode) Big() *big.Int {
+	return ethutil.BigD(ethutil.Encode([]byte(self)))
+}
+
+func Sha3(v interface{}) *big.Int {
+	if b, ok := v.(*big.Int); ok {
+		return ethutil.BigD(crypto.Sha3(b.Bytes()))
+	} else if b, ok := v.([]interface{}); ok {
+		return ethutil.BigD(crypto.Sha3(ethutil.Encode(b)))
+	} else if s, ok := v.([]*big.Int); ok {
+		v := make([]interface{}, len(s))
+		for i, b := range s {
+			v[i] = b
+		}
+
+		return ethutil.BigD(crypto.Sha3(ethutil.Encode(v)))
+	}
+
+	return nil
+}
+
+type NumberGenerator interface {
+	rand(r *big.Int) *big.Int
+	rand64(r int64) *big.Int
+}
+
+type rnd struct {
+	seed *big.Int
+}
+
+func Rnd(s *big.Int) rnd {
+	return rnd{s}
+}
+
+func (self rnd) rand(r *big.Int) *big.Int {
+	o := b(0).Mod(self.seed, r)
+
+	self.seed.Div(self.seed, r)
+
+	if self.seed.Cmp(ethutil.BigPow(2, 64)) < 0 {
+		self.seed = Sha3(self.seed)
+	}
+
+	return o
+}
+
+func (self rnd) rand64(r int64) *big.Int {
+	return self.rand(b(r))
+}
diff --git a/pow/block.go b/pow/block.go
new file mode 100644
index 0000000000000000000000000000000000000000..4759e19fb375b35007f362fa525f9ad0d891b51d
--- /dev/null
+++ b/pow/block.go
@@ -0,0 +1,9 @@
+package pow
+
+import "math/big"
+
+type Block interface {
+	Diff() *big.Int
+	HashNoNonce() []byte
+	N() []byte
+}
diff --git a/pow/ezp/pow.go b/pow/ezp/pow.go
new file mode 100644
index 0000000000000000000000000000000000000000..bfe3ea098ce27e9a52f844402b536a6c264c2fc7
--- /dev/null
+++ b/pow/ezp/pow.go
@@ -0,0 +1,89 @@
+package ezp
+
+import (
+	"math/big"
+	"math/rand"
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/pow"
+	"github.com/obscuren/sha3"
+)
+
+var powlogger = logger.NewLogger("POW")
+
+type EasyPow struct {
+	hash     *big.Int
+	HashRate int64
+	turbo    bool
+}
+
+func New() *EasyPow {
+	return &EasyPow{turbo: true}
+}
+
+func (pow *EasyPow) GetHashrate() int64 {
+	return pow.HashRate
+}
+
+func (pow *EasyPow) Turbo(on bool) {
+	pow.turbo = on
+}
+
+func (pow *EasyPow) Search(block pow.Block, stop <-chan struct{}) []byte {
+	r := rand.New(rand.NewSource(time.Now().UnixNano()))
+	hash := block.HashNoNonce()
+	diff := block.Diff()
+	i := int64(0)
+	start := time.Now().UnixNano()
+	t := time.Now()
+
+	for {
+		select {
+		case <-stop:
+			powlogger.Infoln("Breaking from mining")
+			pow.HashRate = 0
+			return nil
+		default:
+			i++
+
+			if time.Since(t) > (1 * time.Second) {
+				elapsed := time.Now().UnixNano() - start
+				hashes := ((float64(1e9) / float64(elapsed)) * float64(i)) / 1000
+				pow.HashRate = int64(hashes)
+				powlogger.Infoln("Hashing @", pow.HashRate, "khash")
+
+				t = time.Now()
+			}
+
+			sha := crypto.Sha3(big.NewInt(r.Int63()).Bytes())
+			if pow.verify(hash, diff, sha) {
+				return sha
+			}
+		}
+
+		if !pow.turbo {
+			time.Sleep(20 * time.Microsecond)
+		}
+	}
+
+	return nil
+}
+
+func (pow *EasyPow) verify(hash []byte, diff *big.Int, nonce []byte) bool {
+	sha := sha3.NewKeccak256()
+
+	d := append(hash, nonce...)
+	sha.Write(d)
+
+	verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff)
+	res := ethutil.U256(ethutil.BigD(sha.Sum(nil)))
+
+	return res.Cmp(verification) <= 0
+}
+
+func (pow *EasyPow) Verify(block pow.Block) bool {
+	return pow.verify(block.HashNoNonce(), block.Diff(), block.N())
+}
diff --git a/pow/pow.go b/pow/pow.go
new file mode 100644
index 0000000000000000000000000000000000000000..c94ee40ba454dada44fa9b017a3fcf4dafb3e1cf
--- /dev/null
+++ b/pow/pow.go
@@ -0,0 +1,8 @@
+package pow
+
+type PoW interface {
+	Search(block Block, stop <-chan struct{}) []byte
+	Verify(block Block) bool
+	GetHashrate() int64
+	Turbo(bool)
+}
diff --git a/profile.cov b/profile.cov
new file mode 100644
index 0000000000000000000000000000000000000000..e92cd379f39412d832e98554bc261ccbc6cf1c48
--- /dev/null
+++ b/profile.cov
@@ -0,0 +1,3038 @@
+mode: count
+github.com/ethereum/go-ethereum/chain/state_transition.go:40.134,42.2 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:44.60,45.20 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:49.2,50.16 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:45.20,47.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:52.58,53.21 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:57.2,59.17 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:53.21,55.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:61.60,62.49 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:66.2,66.21 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:70.2,71.17 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:62.49,64.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:66.21,68.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:74.60,75.30 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:78.2,80.12 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:75.30,77.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:83.54,85.2 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:87.45,91.50 3 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:95.2,97.16 3 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:101.2,104.12 3 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:91.50,93.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:97.16,99.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:107.42,114.2 4 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:116.53,123.30 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:128.2,128.37 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:132.2,132.12 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:123.30,125.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:128.37,130.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:135.60,139.39 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:143.2,155.45 4 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:160.2,162.46 3 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:166.2,166.42 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:170.2,172.26 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:198.2,207.41 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:264.2,264.8 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:139.39,141.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:155.45,157.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:162.46,164.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:166.42,168.3 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:172.26,181.22 5 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:186.3,186.33 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:181.22,183.4 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:187.4,196.3 4 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:207.41,214.20 3 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:220.3,221.20 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:214.20,218.4 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:222.4,223.29 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:223.29,225.21 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:231.4,231.20 1 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:225.21,229.5 2 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:267.122,281.2 5 0
+github.com/ethereum/go-ethereum/chain/state_transition.go:284.81,291.2 4 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:34.79,35.48 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:35.48,36.42 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:36.42,37.9 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:42.102,43.48 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:51.2,51.12 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:43.48,44.49 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:44.49,45.21 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:45.21,47.5 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:80.45,87.2 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:90.59,98.2 4 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:100.70,105.18 2 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:109.2,109.55 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:113.2,113.38 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:119.2,124.41 3 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:128.2,128.21 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:137.2,137.12 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:105.18,107.3 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:109.55,111.3 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:113.38,115.3 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:124.41,126.3 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:128.21,129.51 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:129.51,131.4 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:140.36,142.6 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:142.6,143.10 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:144.3,146.83 2 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:150.4,150.22 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:155.4,156.18 2 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:170.3,171.13 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:146.83,148.5 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:150.22,151.10 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:156.18,158.5 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:158.6,169.5 5 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:176.61,178.2 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:180.64,186.53 5 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:194.2,194.15 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:186.53,192.3 3 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:197.55,201.53 3 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:201.53,205.45 4 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:205.45,207.4 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:211.55,215.25 3 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:215.25,216.76 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:216.76,217.15 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:221.4,221.16 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:217.15,220.5 2 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:226.50,234.2 3 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:236.29,238.2 1 0
+github.com/ethereum/go-ethereum/chain/transaction_pool.go:240.28,246.2 3 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:78.57,89.2 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:91.35,93.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:95.34,97.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:99.53,101.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:103.51,105.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:107.52,109.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:111.55,115.2 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:117.54,119.2 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:121.232,131.25 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:178.2,180.53 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:131.25,140.17 6 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:159.3,173.62 10 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:140.17,142.11 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:143.4,145.13 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:146.4,149.15 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:150.4,154.13 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:173.62,175.4 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:183.99,188.34 3 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:192.2,192.37 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:195.2,197.44 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:188.34,190.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:192.37,194.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:200.121,211.61 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:215.2,216.16 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:220.2,221.44 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:226.2,227.54 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:233.2,233.55 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:238.2,238.66 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:244.2,245.49 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:250.2,252.31 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:258.2,258.41 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:211.61,213.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:216.16,218.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:221.44,224.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:227.54,230.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:233.55,236.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:238.66,241.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:245.49,248.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:252.31,255.3 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:258.41,272.3 7 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:272.4,274.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:277.120,283.16 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:287.2,287.22 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:283.16,285.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:290.74,292.37 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:297.2,303.26 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:310.2,310.19 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:292.37,294.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:303.26,308.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:316.73,318.36 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:322.2,323.14 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:335.2,335.72 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:339.2,339.12 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:318.36,320.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:323.14,325.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:335.72,337.3 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:342.97,347.37 4 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:378.2,382.12 3 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:347.37,348.34 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:353.3,354.25 2 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:358.3,358.81 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:362.3,362.40 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:366.3,374.68 6 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:348.34,351.4 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:354.25,356.4 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:358.81,360.4 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:362.40,364.4 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:385.96,386.37 1 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:390.2,403.39 6 0
+github.com/ethereum/go-ethereum/chain/block_manager.go:386.37,388.3 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:34.40,36.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:38.62,40.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:45.54,47.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:49.50,51.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:53.44,55.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:57.42,59.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:61.42,63.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:65.40,67.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:69.37,71.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:73.39,75.2 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:78.45,80.25 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:83.2,84.23 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:88.2,93.41 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:119.2,121.24 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:80.25,82.3 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:84.23,86.3 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:93.41,95.10 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:104.3,104.30 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:116.3,116.59 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:96.3,97.15 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:98.3,99.9 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:104.30,107.18 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:113.4,113.61 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:107.18,110.10 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:124.58,125.33 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:131.2,131.8 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:125.33,126.34 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:126.34,128.4 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:134.76,138.31 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:172.2,172.17 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:138.31,139.57 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:143.3,143.63 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:147.3,148.29 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:152.3,152.46 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:165.3,165.13 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:169.3,169.39 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:139.57,140.12 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:143.63,144.12 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:148.29,150.4 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:152.46,153.95 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:157.4,157.110 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:161.4,162.9 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:153.95,154.13 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:157.110,158.13 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:165.13,166.12 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:175.58,177.24 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:188.2,188.22 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:199.2,199.35 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:177.24,178.34 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:178.34,179.48 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:179.48,181.10 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:184.4,186.3 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:188.22,189.30 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:189.30,190.114 1 0
+github.com/ethereum/go-ethereum/chain/filter.go:190.114,192.10 2 0
+github.com/ethereum/go-ethereum/chain/filter.go:195.4,197.3 1 0
+github.com/ethereum/go-ethereum/chain/error.go:14.38,16.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:18.37,20.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:22.34,26.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:32.37,34.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:36.35,38.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:40.33,44.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:51.42,53.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:55.70,57.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:59.38,63.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:70.36,74.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:75.40,77.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:78.51,80.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:87.37,89.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:91.43,93.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:95.33,99.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:105.35,107.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:108.41,110.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:112.36,116.2 2 0
+github.com/ethereum/go-ethereum/chain/error.go:122.37,124.2 1 0
+github.com/ethereum/go-ethereum/chain/error.go:125.30,128.2 2 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:17.83,23.2 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:25.43,25.70 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:26.43,26.71 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:27.43,27.73 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:28.43,28.73 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:29.43,29.69 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:30.43,30.75 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:31.43,31.71 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:32.43,32.67 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:33.43,33.64 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:34.43,34.73 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:35.43,37.2 1 0
+github.com/ethereum/go-ethereum/chain/vm_env.go:38.73,40.2 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:11.48,13.6 2 0
+github.com/ethereum/go-ethereum/chain/asm.go:49.2,49.12 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:13.6,14.50 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:19.3,25.13 4 0
+github.com/ethereum/go-ethereum/chain/asm.go:46.3,46.27 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:14.50,16.4 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:26.3,33.39 3 0
+github.com/ethereum/go-ethereum/chain/asm.go:37.4,38.22 2 0
+github.com/ethereum/go-ethereum/chain/asm.go:41.4,43.31 2 0
+github.com/ethereum/go-ethereum/chain/asm.go:33.39,35.5 1 0
+github.com/ethereum/go-ethereum/chain/asm.go:38.22,40.5 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:17.42,27.4 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:27.4,32.3 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:35.58,39.33 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:45.2,45.13 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:39.33,41.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:41.4,43.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:63.38,71.2 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:73.67,75.2 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:77.40,79.20 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:94.2,94.88 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:79.20,90.3 6 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:90.4,92.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:98.64,102.28 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:107.2,118.19 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:125.2,125.14 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:102.28,105.3 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:118.19,123.3 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:128.33,140.2 6 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:143.49,154.2 6 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:157.48,159.2 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:162.52,165.2 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:167.92,169.18 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:174.2,174.35 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:185.2,185.8 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:169.18,171.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:174.35,178.42 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:182.3,182.40 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:178.42,179.9 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:188.62,190.20 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:203.2,203.38 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:190.20,191.31 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:200.3,200.13 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:191.31,193.63 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:193.63,194.63 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:194.63,196.6 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:206.69,208.60 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:214.2,214.60 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:218.2,218.14 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:208.60,209.35 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:209.35,210.9 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:214.60,216.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:221.57,224.2 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:226.79,228.19 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:232.2,235.37 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:239.2,243.16 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:228.19,230.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:235.37,237.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:246.71,252.2 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:255.60,261.2 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:263.32,264.28 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:264.28,266.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:269.72,271.2 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:274.99,275.49 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:284.2,285.26 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:275.49,282.3 4 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:285.26,288.3 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:291.81,293.15 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:295.2,295.49 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:321.2,321.26 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:326.2,328.8 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:293.15,293.42 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:295.49,302.20 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:307.3,309.17 3 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:317.3,318.24 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:302.20,305.4 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:309.17,316.4 5 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:321.26,324.3 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:341.48,344.31 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:348.2,348.14 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:344.31,346.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:351.44,353.48 2 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:357.2,357.28 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:353.48,355.3 1 0
+github.com/ethereum/go-ethereum/chain/chain_manager.go:365.48,368.2 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:31.41,33.2 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:35.36,37.2 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:39.77,47.6 7 0
+github.com/ethereum/go-ethereum/chain/dagger.go:76.2,76.12 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:47.6,48.10 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:71.3,71.17 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:49.3,52.14 3 0
+github.com/ethereum/go-ethereum/chain/dagger.go:53.3,56.41 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:65.4,66.35 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:56.41,63.5 5 0
+github.com/ethereum/go-ethereum/chain/dagger.go:66.35,68.5 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:71.17,73.4 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:79.75,92.2 8 0
+github.com/ethereum/go-ethereum/chain/dagger.go:94.44,95.2 0 0
+github.com/ethereum/go-ethereum/chain/dagger.go:104.59,107.28 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:125.2,125.14 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:107.28,112.23 4 0
+github.com/ethereum/go-ethereum/chain/dagger.go:120.3,120.12 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:112.23,117.4 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:120.12,121.9 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:128.57,141.40 8 0
+github.com/ethereum/go-ethereum/chain/dagger.go:146.2,146.40 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:153.2,153.24 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:141.40,145.3 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:146.40,148.29 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:148.29,150.4 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:156.60,163.2 4 0
+github.com/ethereum/go-ethereum/chain/dagger.go:165.52,173.2 5 0
+github.com/ethereum/go-ethereum/chain/dagger.go:175.54,176.12 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:180.2,181.12 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:187.2,193.39 6 0
+github.com/ethereum/go-ethereum/chain/dagger.go:206.2,208.12 2 0
+github.com/ethereum/go-ethereum/chain/dagger.go:176.12,178.3 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:181.12,183.3 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:183.4,185.3 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:193.39,204.3 9 0
+github.com/ethereum/go-ethereum/chain/dagger.go:211.32,214.2 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:216.46,224.25 6 0
+github.com/ethereum/go-ethereum/chain/dagger.go:240.2,240.31 1 0
+github.com/ethereum/go-ethereum/chain/dagger.go:224.25,238.3 10 0
+github.com/ethereum/go-ethereum/chain/types/block.go:23.45,30.2 5 0
+github.com/ethereum/go-ethereum/chain/types/block.go:32.41,34.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:38.46,40.29 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:44.2,44.12 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:40.29,42.3 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:49.41,55.2 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:62.35,62.62 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:63.40,65.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:66.45,66.95 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:68.33,68.72 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:104.43,109.2 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:112.59,117.2 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:124.23,143.2 4 0
+github.com/ethereum/go-ethereum/chain/types/block.go:146.42,149.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:151.42,153.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:155.42,157.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:159.49,161.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:163.58,164.42 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:170.2,179.36 7 0
+github.com/ethereum/go-ethereum/chain/types/block.go:164.42,166.3 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:182.43,188.2 4 0
+github.com/ethereum/go-ethereum/chain/types/block.go:190.61,191.39 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:197.2,197.12 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:191.39,192.42 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:192.42,194.4 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:201.28,203.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:205.28,208.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:211.47,214.35 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:219.2,219.13 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:214.35,217.3 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:222.45,225.37 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:230.2,230.15 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:225.37,228.3 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:233.48,236.2 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:238.51,242.2 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:244.54,247.2 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:249.44,251.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:253.40,257.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:259.44,262.2 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:264.60,269.37 2 0
+github.com/ethereum/go-ethereum/chain/types/block.go:283.2,283.37 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:269.37,274.34 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:274.34,279.4 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:283.37,286.37 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:286.37,288.4 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:293.53,309.2 15 0
+github.com/ethereum/go-ethereum/chain/types/block.go:311.59,316.2 3 0
+github.com/ethereum/go-ethereum/chain/types/block.go:318.39,320.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:322.40,324.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:326.37,328.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:330.42,332.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:334.50,365.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:367.44,369.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:371.37,410.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:412.47,414.2 1 0
+github.com/ethereum/go-ethereum/chain/types/block.go:417.42,419.2 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:11.44,13.35 2 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:17.2,17.46 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:13.35,15.3 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:20.42,22.27 2 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:37.2,37.12 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:22.27,24.36 2 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:28.3,28.26 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:24.36,26.4 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:28.26,30.4 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:40.32,42.35 2 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:48.2,48.10 1 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:42.35,46.3 3 0
+github.com/ethereum/go-ethereum/chain/types/bloom9.go:51.42,56.2 3 0
+github.com/ethereum/go-ethereum/chain/types/derive_sha.go:13.43,15.34 2 0
+github.com/ethereum/go-ethereum/chain/types/derive_sha.go:19.2,19.23 1 0
+github.com/ethereum/go-ethereum/chain/types/derive_sha.go:15.34,17.3 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:19.67,21.2 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:23.55,28.2 3 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:30.47,32.2 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:34.61,40.16 5 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:40.16,42.3 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:45.44,47.2 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:49.41,51.2 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:53.47,54.57 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:58.2,58.13 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:54.57,56.3 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:61.38,63.2 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:67.43,67.63 1 0
+github.com/ethereum/go-ethereum/chain/types/receipt.go:68.43,68.74 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:15.39,18.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:34.87,36.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:38.96,40.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:42.56,47.2 3 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:49.63,54.2 3 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:56.46,58.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:60.48,63.2 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:65.38,69.2 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:71.47,73.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:76.42,78.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:80.67,88.2 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:90.53,96.2 3 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:98.43,112.2 7 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:114.40,119.40 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:123.2,123.37 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:119.40,121.3 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:126.49,135.2 5 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:137.46,143.2 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:145.50,147.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:149.43,151.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:153.47,155.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:157.63,169.34 10 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:169.34,171.3 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:174.40,201.2 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:206.48,209.26 2 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:214.2,214.12 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:209.26,212.3 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:216.44,216.61 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:217.44,217.71 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:218.44,218.72 1 0
+github.com/ethereum/go-ethereum/chain/types/transaction.go:222.40,224.2 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:20.45,23.32 2 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:45.2,45.25 1 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:23.32,24.22 1 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:24.22,25.22 1 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:25.22,26.21 1 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:36.5,36.8 1 4
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:27.5,28.22 1 1
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:29.5,30.26 1 1
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:31.5,32.26 1 1
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:33.5,34.46 1 1
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:37.6,39.5 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:40.5,42.4 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:48.52,49.9 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:50.2,51.38 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:52.2,54.32 2 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:60.3,60.39 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:61.2,62.64 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:67.3,67.14 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:68.2,69.20 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:54.32,55.19 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:58.4,58.7 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:55.19,56.10 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:62.64,64.4 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:64.5,64.79 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:64.79,66.4 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:73.34,77.19 3 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:83.2,83.20 1 0
+github.com/ethereum/go-ethereum/compression/rle/read_write.go:77.19,81.3 3 0
+github.com/ethereum/go-ethereum/crypto/crypto.go:13.31,18.2 3 1
+github.com/ethereum/go-ethereum/crypto/crypto.go:21.51,23.2 1 0
+github.com/ethereum/go-ethereum/crypto/crypto.go:25.33,29.2 2 1
+github.com/ethereum/go-ethereum/crypto/crypto.go:31.36,36.2 3 1
+github.com/ethereum/go-ethereum/crypto/crypto.go:38.36,47.2 3 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:18.55,20.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:22.52,24.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:26.41,28.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:30.41,32.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:34.42,36.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:38.41,40.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:42.39,44.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:46.67,48.16 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:51.2,52.12 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:48.16,50.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:55.61,57.12 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:64.2,64.21 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:57.12,60.17 3 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:60.17,62.4 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:67.45,69.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:71.80,72.29 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:75.2,79.16 5 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:82.2,85.12 4 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:72.29,74.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:79.16,81.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:88.50,89.31 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:92.2,93.12 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:89.31,91.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:96.73,98.12 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:105.2,105.20 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:108.2,108.42 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:98.12,101.17 3 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:101.17,103.4 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:105.20,107.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:111.96,113.16 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:116.2,116.42 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:113.16,115.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:119.87,121.16 2 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:124.2,124.42 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:121.16,123.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_manager.go:127.47,130.2 2 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:24.51,26.2 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:28.67,31.2 2 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:33.61,35.16 2 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:38.2,40.16 3 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:44.2,44.24 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:47.2,47.21 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:35.16,37.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:40.16,42.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:44.24,46.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:54.69,61.38 7 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:68.2,69.19 2 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:73.2,76.16 4 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:80.2,82.16 3 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:86.2,88.16 3 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:92.2,94.16 3 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:98.2,98.12 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:61.38,66.3 4 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:69.19,71.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:76.16,78.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:82.16,84.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:88.16,90.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:94.16,96.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:101.63,103.19 2 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:106.2,109.16 3 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:112.2,112.36 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:103.19,105.3 1 0
+github.com/ethereum/go-ethereum/crypto/key_store.go:109.16,111.3 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:19.36,23.2 3 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:25.57,27.16 2 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:31.2,31.61 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:27.16,29.3 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:34.36,35.22 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:38.2,38.18 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:35.22,37.3 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:41.37,42.22 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:45.2,45.19 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:42.22,44.3 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:48.64,50.2 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:52.38,54.2 1 0
+github.com/ethereum/go-ethereum/crypto/keypair.go:56.45,58.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:15.28,17.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:19.48,21.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:23.46,24.21 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:28.2,28.12 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:24.21,26.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:31.32,33.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:35.29,37.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:39.42,40.33 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:40.33,42.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:45.44,47.27 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:50.2,50.16 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:47.27,49.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:53.59,57.16 4 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:60.2,61.16 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:64.2,64.21 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:57.16,59.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:61.16,63.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:67.61,70.45 3 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:84.2,84.39 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:70.45,73.23 3 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:79.3,79.23 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:73.23,75.4 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:75.5,75.29 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:75.29,77.4 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:79.23,81.4 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:87.61,89.27 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:96.2,96.21 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:89.27,91.17 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:94.3,94.30 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:91.17,93.4 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:99.57,102.16 3 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:106.2,107.16 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:110.2,110.21 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:102.16,105.3 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:107.16,109.3 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:113.38,115.2 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:117.45,119.32 2 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:122.2,122.10 1 0
+github.com/ethereum/go-ethereum/crypto/keyring.go:119.32,121.3 1 0
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:9.50,10.26 1 24
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:15.2,15.11 1 0
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:10.26,11.17 1 18817
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:11.17,13.4 1 24
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:18.46,22.56 3 1
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:30.2,30.12 1 1
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:22.56,29.3 6 8
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:33.46,37.39 3 1
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:59.2,59.12 1 1
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:37.39,50.12 9 8
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:53.3,53.12 1 8
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:56.3,57.32 2 8
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:50.12,52.4 1 4
+github.com/ethereum/go-ethereum/crypto/mnemonic.go:53.12,55.4 1 2
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:16.45,20.2 2 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:22.54,24.2 1 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:26.56,28.2 1 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:38.49,42.2 2 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:44.32,45.30 1 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:45.30,49.3 3 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:52.32,53.2 0 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:55.45,58.35 2 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:62.2,62.13 1 0
+github.com/ethereum/go-ethereum/ethdb/memory_database.go:58.35,60.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:18.56,23.16 3 0
+github.com/ethereum/go-ethereum/ethdb/database.go:27.2,29.22 2 0
+github.com/ethereum/go-ethereum/ethdb/database.go:23.16,25.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:32.56,33.15 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:37.2,38.16 2 0
+github.com/ethereum/go-ethereum/ethdb/database.go:33.15,35.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:38.16,40.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:43.58,45.16 2 0
+github.com/ethereum/go-ethereum/ethdb/database.go:49.2,49.15 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:53.2,53.17 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:45.16,47.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:49.15,51.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:56.51,58.2 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:60.47,63.20 2 0
+github.com/ethereum/go-ethereum/ethdb/database.go:67.2,67.13 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:63.20,65.3 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:70.58,72.2 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:74.34,77.2 1 0
+github.com/ethereum/go-ethereum/ethdb/database.go:79.34,81.18 2 0
+github.com/ethereum/go-ethereum/ethdb/database.go:81.18,88.3 5 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:14.35,16.2 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:18.60,19.22 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:25.2,25.10 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:19.22,20.34 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:20.34,22.4 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:31.54,34.16 3 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:38.2,38.41 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:34.16,36.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:44.37,53.16 6 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:57.2,57.15 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:53.16,55.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:63.43,64.25 1 5
+github.com/ethereum/go-ethereum/ethutil/bytes.go:84.2,84.8 1 5
+github.com/ethereum/go-ethereum/ethutil/bytes.go:65.2,67.58 2 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:68.2,72.20 4 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:73.2,77.20 4 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:78.2,81.20 3 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:90.32,91.14 1 7
+github.com/ethereum/go-ethereum/ethutil/bytes.go:95.2,95.33 1 5
+github.com/ethereum/go-ethereum/ethutil/bytes.go:91.14,93.3 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:101.47,106.2 3 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:108.29,111.2 2 5
+github.com/ethereum/go-ethereum/ethutil/bytes.go:113.33,115.2 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:117.35,121.2 2 3
+github.com/ethereum/go-ethereum/ethutil/bytes.go:123.76,124.70 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:130.2,130.8 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:124.70,126.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:126.4,128.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:133.37,134.20 1 4
+github.com/ethereum/go-ethereum/ethutil/bytes.go:138.2,139.53 2 3
+github.com/ethereum/go-ethereum/ethutil/bytes.go:147.2,147.27 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:134.20,136.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:139.53,141.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:141.4,141.46 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:141.46,143.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:143.4,145.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:150.50,151.28 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:167.2,167.8 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:151.28,152.27 1 4
+github.com/ethereum/go-ethereum/ethutil/bytes.go:153.3,155.16 2 3
+github.com/ethereum/go-ethereum/ethutil/bytes.go:161.4,161.48 1 3
+github.com/ethereum/go-ethereum/ethutil/bytes.go:162.3,163.45 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:155.16,157.5 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:157.6,159.5 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:170.48,171.20 1 6
+github.com/ethereum/go-ethereum/ethutil/bytes.go:175.2,178.15 3 5
+github.com/ethereum/go-ethereum/ethutil/bytes.go:171.20,173.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:181.47,182.20 1 7
+github.com/ethereum/go-ethereum/ethutil/bytes.go:186.2,189.15 3 6
+github.com/ethereum/go-ethereum/ethutil/bytes.go:182.20,184.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:192.46,193.18 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:197.2,199.20 2 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:193.18,195.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:203.47,204.18 1 2
+github.com/ethereum/go-ethereum/ethutil/bytes.go:208.2,210.20 2 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:204.18,206.3 1 1
+github.com/ethereum/go-ethereum/ethutil/bytes.go:214.42,215.21 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:223.2,225.8 2 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:215.21,217.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:217.4,217.28 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:217.28,219.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:219.4,221.3 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:228.63,229.26 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:233.2,233.8 1 0
+github.com/ethereum/go-ethereum/ethutil/bytes.go:229.26,231.3 1 0
+github.com/ethereum/go-ethereum/ethutil/path.go:10.45,14.22 2 2
+github.com/ethereum/go-ethereum/ethutil/path.go:21.2,21.8 1 2
+github.com/ethereum/go-ethereum/ethutil/path.go:14.22,19.3 3 1
+github.com/ethereum/go-ethereum/ethutil/path.go:24.38,26.38 2 2
+github.com/ethereum/go-ethereum/ethutil/path.go:30.2,30.13 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:26.38,28.3 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:33.51,35.16 2 2
+github.com/ethereum/go-ethereum/ethutil/path.go:39.2,40.16 2 1
+github.com/ethereum/go-ethereum/ethutil/path.go:44.2,44.26 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:35.16,37.3 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:40.16,42.3 1 0
+github.com/ethereum/go-ethereum/ethutil/path.go:47.55,49.16 2 2
+github.com/ethereum/go-ethereum/ethutil/path.go:52.2,55.16 3 1
+github.com/ethereum/go-ethereum/ethutil/path.go:59.2,59.12 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:49.16,51.3 1 1
+github.com/ethereum/go-ethereum/ethutil/path.go:55.16,57.3 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:15.66,16.21 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:48.2,48.17 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:16.21,19.41 2 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:19.41,20.16 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:21.4,23.19 2 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:27.5,27.25 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:23.19,25.6 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:29.5,34.23 4 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:44.4,44.24 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:34.23,36.31 2 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:41.5,41.39 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:36.31,37.19 1 0
+github.com/ethereum/go-ethereum/ethutil/script_unix.go:37.19,39.7 1 0
+github.com/ethereum/go-ethereum/ethutil/size.go:7.41,8.20 1 3
+github.com/ethereum/go-ethereum/ethutil/size.go:8.20,10.3 1 1
+github.com/ethereum/go-ethereum/ethutil/size.go:10.4,10.24 1 2
+github.com/ethereum/go-ethereum/ethutil/size.go:10.24,12.3 1 1
+github.com/ethereum/go-ethereum/ethutil/size.go:12.4,14.3 1 1
+github.com/ethereum/go-ethereum/ethutil/rlp.go:22.36,24.2 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:30.34,34.2 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:35.65,37.2 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:46.25,47.16 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:51.2,51.15 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:47.16,49.3 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:54.57,59.9 3 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:91.2,91.14 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:60.2,61.14 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:63.2,64.39 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:66.2,69.34 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:71.2,73.31 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:78.3,78.15 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:79.2,81.39 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:86.3,86.15 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:87.2,88.53 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:73.31,76.4 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:81.39,84.4 2 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:100.40,103.19 2 59
+github.com/ethereum/go-ethereum/ethutil/rlp.go:177.2,177.21 1 59
+github.com/ethereum/go-ethereum/ethutil/rlp.go:103.19,104.29 1 59
+github.com/ethereum/go-ethereum/ethutil/rlp.go:105.3,106.31 1 2
+github.com/ethereum/go-ethereum/ethutil/rlp.go:107.3,108.35 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:110.3,111.44 1 10
+github.com/ethereum/go-ethereum/ethutil/rlp.go:112.3,113.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:114.3,115.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:116.3,117.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:118.3,119.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:120.3,121.37 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:122.3,123.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:124.3,125.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:126.3,127.44 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:128.3,129.44 1 1
+github.com/ethereum/go-ethereum/ethutil/rlp.go:130.3,132.16 1 12
+github.com/ethereum/go-ethereum/ethutil/rlp.go:137.3,138.33 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:139.3,140.35 1 20
+github.com/ethereum/go-ethereum/ethutil/rlp.go:151.3,152.33 1 6
+github.com/ethereum/go-ethereum/ethutil/rlp.go:153.3,155.41 1 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:165.4,166.26 2 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:169.4,170.25 2 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:132.16,134.5 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:134.6,136.5 1 12
+github.com/ethereum/go-ethereum/ethutil/rlp.go:140.35,142.5 1 11
+github.com/ethereum/go-ethereum/ethutil/rlp.go:142.6,142.26 1 9
+github.com/ethereum/go-ethereum/ethutil/rlp.go:142.26,145.5 2 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:145.6,150.5 4 1
+github.com/ethereum/go-ethereum/ethutil/rlp.go:155.41,156.20 1 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:156.20,158.6 1 8
+github.com/ethereum/go-ethereum/ethutil/rlp.go:158.7,162.6 3 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:166.26,168.5 1 19
+github.com/ethereum/go-ethereum/ethutil/rlp.go:172.4,175.3 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:182.60,185.9 3 16
+github.com/ethereum/go-ethereum/ethutil/rlp.go:241.2,241.17 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:186.2,187.28 1 3
+github.com/ethereum/go-ethereum/ethutil/rlp.go:189.2,192.44 2 9
+github.com/ethereum/go-ethereum/ethutil/rlp.go:194.2,199.54 3 1
+github.com/ethereum/go-ethereum/ethutil/rlp.go:201.2,205.30 4 3
+github.com/ethereum/go-ethereum/ethutil/rlp.go:217.3,217.20 1 3
+github.com/ethereum/go-ethereum/ethutil/rlp.go:219.2,226.38 5 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:235.3,235.20 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:237.2,238.53 1 0
+github.com/ethereum/go-ethereum/ethutil/rlp.go:205.30,216.4 5 9
+github.com/ethereum/go-ethereum/ethutil/rlp.go:226.38,234.4 5 0
+github.com/ethereum/go-ethereum/ethutil/set.go:13.40,15.24 2 0
+github.com/ethereum/go-ethereum/ethutil/set.go:19.2,19.12 1 0
+github.com/ethereum/go-ethereum/ethutil/set.go:15.24,17.3 1 0
+github.com/ethereum/go-ethereum/ethutil/set.go:22.54,26.2 2 0
+github.com/ethereum/go-ethereum/ethutil/set.go:28.50,32.2 2 0
+github.com/ethereum/go-ethereum/ethutil/set.go:34.32,36.2 1 0
+github.com/ethereum/go-ethereum/ethutil/big.go:8.32,13.2 3 18
+github.com/ethereum/go-ethereum/ethutil/big.go:18.31,23.2 3 8
+github.com/ethereum/go-ethereum/ethutil/big.go:28.33,33.2 3 1
+github.com/ethereum/go-ethereum/ethutil/big.go:35.40,37.2 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:46.32,54.2 2 2
+github.com/ethereum/go-ethereum/ethutil/big.go:56.32,57.22 1 2
+github.com/ethereum/go-ethereum/ethutil/big.go:57.22,59.3 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:59.4,62.3 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:69.48,72.31 2 4
+github.com/ethereum/go-ethereum/ethutil/big.go:76.2,76.64 1 3
+github.com/ethereum/go-ethereum/ethutil/big.go:72.31,74.3 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:82.37,84.2 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:89.37,90.19 1 2
+github.com/ethereum/go-ethereum/ethutil/big.go:94.2,94.10 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:90.19,92.3 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:100.37,101.19 1 2
+github.com/ethereum/go-ethereum/ethutil/big.go:105.2,105.10 1 1
+github.com/ethereum/go-ethereum/ethutil/big.go:101.19,103.3 1 1
+github.com/ethereum/go-ethereum/ethutil/config.go:30.85,31.19 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:48.2,48.15 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:31.19,33.29 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:37.3,41.17 2 0
+github.com/ethereum/go-ethereum/ethutil/config.go:46.3,46.83 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:33.29,36.4 2 0
+github.com/ethereum/go-ethereum/ethutil/config.go:41.17,43.4 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:43.5,45.4 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:52.61,55.2 2 0
+github.com/ethereum/go-ethereum/ethutil/config.go:57.44,59.2 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:67.49,69.2 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:71.43,71.64 1 0
+github.com/ethereum/go-ethereum/ethutil/config.go:72.43,72.73 2 0
+github.com/ethereum/go-ethereum/ethutil/list.go:20.35,22.34 2 0
+github.com/ethereum/go-ethereum/ethutil/list.go:26.2,26.49 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:22.34,24.3 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:29.24,31.2 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:34.42,35.25 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:44.2,44.12 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:35.25,42.3 4 0
+github.com/ethereum/go-ethereum/ethutil/list.go:47.48,53.2 3 0
+github.com/ethereum/go-ethereum/ethutil/list.go:57.41,63.2 4 0
+github.com/ethereum/go-ethereum/ethutil/list.go:66.43,68.2 1 0
+github.com/ethereum/go-ethereum/ethutil/list.go:71.35,74.35 2 0
+github.com/ethereum/go-ethereum/ethutil/list.go:78.2,80.21 2 0
+github.com/ethereum/go-ethereum/ethutil/list.go:74.35,76.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:33.44,35.16 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:38.2,41.16 3 0
+github.com/ethereum/go-ethereum/ethutil/package.go:45.2,45.21 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:35.16,37.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:41.16,43.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:51.48,55.49 3 0
+github.com/ethereum/go-ethereum/ethutil/package.go:60.2,60.23 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:55.49,56.3 0 0
+github.com/ethereum/go-ethereum/ethutil/package.go:56.4,56.23 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:56.23,58.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:66.66,69.26 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:75.2,75.8 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:69.26,70.19 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:70.19,72.4 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:83.50,85.16 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:88.2,92.23 3 0
+github.com/ethereum/go-ethereum/ethutil/package.go:96.2,97.16 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:101.2,102.16 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:106.2,106.26 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:110.2,111.20 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:115.2,116.16 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:120.2,122.24 2 0
+github.com/ethereum/go-ethereum/ethutil/package.go:85.16,87.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:92.23,94.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:97.16,99.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:102.16,104.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:106.26,108.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:111.20,113.3 1 0
+github.com/ethereum/go-ethereum/ethutil/package.go:116.16,118.3 1 0
+github.com/ethereum/go-ethereum/ethutil/common.go:9.23,11.2 1 2
+github.com/ethereum/go-ethereum/ethutil/common.go:13.40,14.43 1 1
+github.com/ethereum/go-ethereum/ethutil/common.go:17.2,17.13 1 1
+github.com/ethereum/go-ethereum/ethutil/common.go:14.43,16.3 1 0
+github.com/ethereum/go-ethereum/ethutil/common.go:36.44,42.9 2 12
+github.com/ethereum/go-ethereum/ethutil/common.go:70.2,70.27 1 12
+github.com/ethereum/go-ethereum/ethutil/common.go:74.2,74.41 1 10
+github.com/ethereum/go-ethereum/ethutil/common.go:43.2,45.20 2 2
+github.com/ethereum/go-ethereum/ethutil/common.go:46.2,48.21 2 2
+github.com/ethereum/go-ethereum/ethutil/common.go:49.2,51.18 2 1
+github.com/ethereum/go-ethereum/ethutil/common.go:52.2,54.19 2 1
+github.com/ethereum/go-ethereum/ethutil/common.go:55.2,57.18 2 1
+github.com/ethereum/go-ethereum/ethutil/common.go:58.2,60.20 2 1
+github.com/ethereum/go-ethereum/ethutil/common.go:61.2,63.20 2 2
+github.com/ethereum/go-ethereum/ethutil/common.go:64.2,66.16 2 1
+github.com/ethereum/go-ethereum/ethutil/common.go:70.27,72.3 1 2
+github.com/ethereum/go-ethereum/ethutil/rand.go:9.48,12.17 3 2
+github.com/ethereum/go-ethereum/ethutil/rand.go:15.2,15.16 1 2
+github.com/ethereum/go-ethereum/ethutil/rand.go:18.2,18.40 1 2
+github.com/ethereum/go-ethereum/ethutil/rand.go:12.17,14.3 1 0
+github.com/ethereum/go-ethereum/ethutil/rand.go:15.16,17.3 1 0
+github.com/ethereum/go-ethereum/ethutil/rand.go:22.37,24.2 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:19.35,21.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:23.39,25.31 2 39
+github.com/ethereum/go-ethereum/ethutil/value.go:29.2,29.23 1 39
+github.com/ethereum/go-ethereum/ethutil/value.go:25.31,27.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:32.39,34.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:36.32,38.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:40.29,42.45 1 8
+github.com/ethereum/go-ethereum/ethutil/value.go:46.2,46.25 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:42.45,44.3 1 7
+github.com/ethereum/go-ethereum/ethutil/value.go:49.37,51.2 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:53.43,55.2 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:57.33,58.36 1 11
+github.com/ethereum/go-ethereum/ethutil/value.go:80.2,80.10 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:58.36,60.3 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:60.4,60.44 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:60.44,62.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:62.4,62.44 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:62.44,64.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:64.4,64.44 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:64.44,66.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:66.4,66.45 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:66.45,68.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:68.4,68.45 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:68.45,70.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:70.4,70.41 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:70.41,72.3 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:72.4,72.42 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:72.42,74.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:74.4,74.44 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:74.44,76.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:76.4,76.46 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:76.46,78.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:83.31,84.35 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:107.2,107.10 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:84.35,86.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:86.4,86.43 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:86.43,88.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:88.4,88.43 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:88.43,90.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:90.4,90.43 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:90.43,92.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:92.4,92.41 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:92.41,94.3 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:94.4,94.45 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:94.45,96.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:96.4,96.45 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:96.45,98.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:98.4,98.44 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:98.44,100.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:100.4,100.46 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:100.46,102.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:102.4,102.44 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:102.44,105.3 2 1
+github.com/ethereum/go-ethereum/ethutil/value.go:110.31,111.35 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:115.2,115.12 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:111.35,113.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:118.37,119.35 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:131.2,131.22 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:119.35,123.3 2 1
+github.com/ethereum/go-ethereum/ethutil/value.go:123.4,123.44 1 9
+github.com/ethereum/go-ethereum/ethutil/value.go:123.44,125.3 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:125.4,125.42 1 6
+github.com/ethereum/go-ethereum/ethutil/value.go:125.42,127.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:127.4,129.3 1 6
+github.com/ethereum/go-ethereum/ethutil/value.go:134.32,135.35 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:143.2,143.11 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:135.35,137.3 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:137.4,137.42 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:137.42,139.3 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:139.4,139.40 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:139.40,141.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:146.34,147.35 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:159.2,159.17 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:147.35,149.3 1 6
+github.com/ethereum/go-ethereum/ethutil/value.go:149.4,149.40 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:149.40,151.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:151.4,151.42 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:151.42,153.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:153.4,153.44 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:153.44,155.3 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:155.4,157.3 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:162.31,163.36 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:167.2,167.12 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:163.36,165.3 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:170.41,171.42 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:175.2,175.24 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:171.42,173.3 1 10
+github.com/ethereum/go-ethereum/ethutil/value.go:178.46,182.2 2 1
+github.com/ethereum/go-ethereum/ethutil/value.go:184.42,188.2 2 1
+github.com/ethereum/go-ethereum/ethutil/value.go:190.52,194.2 2 1
+github.com/ethereum/go-ethereum/ethutil/value.go:197.34,199.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:201.32,203.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:205.33,208.2 2 0
+github.com/ethereum/go-ethereum/ethutil/value.go:213.33,217.2 2 0
+github.com/ethereum/go-ethereum/ethutil/value.go:219.34,221.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:224.39,225.42 1 5
+github.com/ethereum/go-ethereum/ethutil/value.go:239.2,239.22 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:225.42,227.20 1 5
+github.com/ethereum/go-ethereum/ethutil/value.go:231.3,231.14 1 5
+github.com/ethereum/go-ethereum/ethutil/value.go:235.3,235.26 1 5
+github.com/ethereum/go-ethereum/ethutil/value.go:227.20,229.4 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:231.14,233.4 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:242.34,243.32 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:252.2,252.12 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:244.2,245.41 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:246.2,247.34 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:248.2,249.28 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:255.38,257.2 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:259.43,261.2 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:263.35,265.2 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:268.29,272.2 2 4
+github.com/ethereum/go-ethereum/ethutil/value.go:274.44,275.20 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:282.2,282.22 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:275.20,280.3 3 3
+github.com/ethereum/go-ethereum/ethutil/value.go:286.42,289.14 2 0
+github.com/ethereum/go-ethereum/ethutil/value.go:301.2,301.13 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:289.14,290.41 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:290.41,291.30 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:291.30,293.5 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:294.5,294.43 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:294.43,295.30 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:295.30,297.5 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:304.26,306.2 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:308.39,313.2 3 2
+github.com/ethereum/go-ethereum/ethutil/value.go:315.48,319.2 2 5
+github.com/ethereum/go-ethereum/ethutil/value.go:330.59,334.12 3 4
+github.com/ethereum/go-ethereum/ethutil/value.go:347.2,347.13 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:335.2,336.35 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:337.2,338.35 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:339.2,340.35 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:341.2,342.41 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:343.2,344.35 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:350.50,352.2 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:354.50,356.2 1 2
+github.com/ethereum/go-ethereum/ethutil/value.go:358.50,360.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:362.50,364.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:366.50,368.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:376.48,378.2 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:380.36,382.2 1 0
+github.com/ethereum/go-ethereum/ethutil/value.go:384.38,385.30 1 4
+github.com/ethereum/go-ethereum/ethutil/value.go:389.2,392.13 3 3
+github.com/ethereum/go-ethereum/ethutil/value.go:385.30,387.3 1 1
+github.com/ethereum/go-ethereum/ethutil/value.go:395.41,397.2 1 3
+github.com/ethereum/go-ethereum/ethutil/value.go:399.36,401.2 1 0
+github.com/ethereum/go-ethereum/event/event.go:41.66,45.17 4 1005
+github.com/ethereum/go-ethereum/event/event.go:63.2,63.12 1 1004
+github.com/ethereum/go-ethereum/event/event.go:45.17,47.3 1 1
+github.com/ethereum/go-ethereum/event/event.go:47.4,48.22 1 1004
+github.com/ethereum/go-ethereum/event/event.go:51.3,51.27 1 1004
+github.com/ethereum/go-ethereum/event/event.go:48.22,50.4 1 5
+github.com/ethereum/go-ethereum/event/event.go:51.27,54.32 3 1006
+github.com/ethereum/go-ethereum/event/event.go:57.4,60.25 4 1005
+github.com/ethereum/go-ethereum/event/event.go:54.32,56.5 1 1
+github.com/ethereum/go-ethereum/event/event.go:68.48,71.17 3 6657815
+github.com/ethereum/go-ethereum/event/event.go:75.2,77.27 3 6657811
+github.com/ethereum/go-ethereum/event/event.go:80.2,80.12 1 6657811
+github.com/ethereum/go-ethereum/event/event.go:71.17,74.3 2 4
+github.com/ethereum/go-ethereum/event/event.go:77.27,79.3 1 4004
+github.com/ethereum/go-ethereum/event/event.go:86.28,88.32 2 5
+github.com/ethereum/go-ethereum/event/event.go:93.2,95.20 3 5
+github.com/ethereum/go-ethereum/event/event.go:88.32,89.28 1 3
+github.com/ethereum/go-ethereum/event/event.go:89.28,91.4 1 3
+github.com/ethereum/go-ethereum/event/event.go:98.36,100.34 2 1001
+github.com/ethereum/go-ethereum/event/event.go:109.2,109.22 1 1001
+github.com/ethereum/go-ethereum/event/event.go:100.34,101.37 1 1001
+github.com/ethereum/go-ethereum/event/event.go:101.37,102.22 1 1001
+github.com/ethereum/go-ethereum/event/event.go:102.22,104.5 1 5
+github.com/ethereum/go-ethereum/event/event.go:104.6,106.5 1 996
+github.com/ethereum/go-ethereum/event/event.go:112.46,113.26 1 2007
+github.com/ethereum/go-ethereum/event/event.go:118.2,118.11 1 1005
+github.com/ethereum/go-ethereum/event/event.go:113.26,114.16 1 17982
+github.com/ethereum/go-ethereum/event/event.go:114.16,116.4 1 1002
+github.com/ethereum/go-ethereum/event/event.go:121.52,126.2 4 996
+github.com/ethereum/go-ethereum/event/event.go:142.35,150.2 2 1005
+github.com/ethereum/go-ethereum/event/event.go:152.44,154.2 1 1003
+github.com/ethereum/go-ethereum/event/event.go:156.32,159.2 2 1001
+github.com/ethereum/go-ethereum/event/event.go:161.30,164.14 3 1004
+github.com/ethereum/go-ethereum/event/event.go:167.2,173.19 6 1003
+github.com/ethereum/go-ethereum/event/event.go:164.14,166.3 1 1
+github.com/ethereum/go-ethereum/event/event.go:176.42,178.9 2 4004
+github.com/ethereum/go-ethereum/event/event.go:182.2,182.20 1 4004
+github.com/ethereum/go-ethereum/event/event.go:179.2,179.21 0 1004
+github.com/ethereum/go-ethereum/event/event.go:180.2,180.19 0 3000
+github.com/ethereum/go-ethereum/logger/loggers.go:56.13,58.2 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:64.21,70.36 2 1
+github.com/ethereum/go-ethereum/logger/loggers.go:77.2,77.6 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:70.36,75.3 4 22
+github.com/ethereum/go-ethereum/logger/loggers.go:77.6,78.10 1 52
+github.com/ethereum/go-ethereum/logger/loggers.go:79.3,80.31 1 20
+github.com/ethereum/go-ethereum/logger/loggers.go:84.3,86.19 2 16
+github.com/ethereum/go-ethereum/logger/loggers.go:88.3,90.31 1 7
+github.com/ethereum/go-ethereum/logger/loggers.go:93.4,96.17 4 7
+github.com/ethereum/go-ethereum/logger/loggers.go:98.3,100.31 1 8
+github.com/ethereum/go-ethereum/logger/loggers.go:103.4,105.32 3 8
+github.com/ethereum/go-ethereum/logger/loggers.go:108.4,108.17 1 8
+github.com/ethereum/go-ethereum/logger/loggers.go:80.31,82.5 1 19
+github.com/ethereum/go-ethereum/logger/loggers.go:90.31,92.5 1 6
+github.com/ethereum/go-ethereum/logger/loggers.go:100.31,102.5 1 6
+github.com/ethereum/go-ethereum/logger/loggers.go:105.32,107.5 1 6
+github.com/ethereum/go-ethereum/logger/loggers.go:113.68,114.22 1 22
+github.com/ethereum/go-ethereum/logger/loggers.go:119.2,119.11 1 12
+github.com/ethereum/go-ethereum/logger/loggers.go:114.22,115.37 1 19
+github.com/ethereum/go-ethereum/logger/loggers.go:115.37,117.4 1 14
+github.com/ethereum/go-ethereum/logger/loggers.go:124.14,128.2 3 7
+github.com/ethereum/go-ethereum/logger/loggers.go:132.14,136.2 3 8
+github.com/ethereum/go-ethereum/logger/loggers.go:139.34,141.2 1 16
+github.com/ethereum/go-ethereum/logger/loggers.go:150.36,152.2 1 7
+github.com/ethereum/go-ethereum/logger/loggers.go:154.64,156.2 1 10
+github.com/ethereum/go-ethereum/logger/loggers.go:158.78,160.2 1 10
+github.com/ethereum/go-ethereum/logger/loggers.go:163.49,165.2 1 2
+github.com/ethereum/go-ethereum/logger/loggers.go:168.48,170.2 1 4
+github.com/ethereum/go-ethereum/logger/loggers.go:173.48,175.2 1 3
+github.com/ethereum/go-ethereum/logger/loggers.go:178.49,180.2 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:183.55,185.2 1 0
+github.com/ethereum/go-ethereum/logger/loggers.go:188.63,190.2 1 7
+github.com/ethereum/go-ethereum/logger/loggers.go:193.62,195.2 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:198.62,200.2 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:203.63,205.2 1 1
+github.com/ethereum/go-ethereum/logger/loggers.go:208.69,210.2 1 0
+github.com/ethereum/go-ethereum/logger/loggers.go:213.49,217.2 3 0
+github.com/ethereum/go-ethereum/logger/loggers.go:220.63,224.2 3 0
+github.com/ethereum/go-ethereum/logger/loggers.go:228.77,231.2 2 11
+github.com/ethereum/go-ethereum/logger/loggers.go:238.61,240.2 1 2
+github.com/ethereum/go-ethereum/logger/loggers.go:242.48,244.2 1 0
+github.com/ethereum/go-ethereum/logger/loggers.go:246.47,248.2 1 2
+github.com/ethereum/go-ethereum/p2p/client_identity.go:23.133,34.2 2 6
+github.com/ethereum/go-ethereum/p2p/client_identity.go:36.39,37.2 0 0
+github.com/ethereum/go-ethereum/p2p/client_identity.go:39.48,41.33 2 11
+github.com/ethereum/go-ethereum/p2p/client_identity.go:45.2,50.20 1 11
+github.com/ethereum/go-ethereum/p2p/client_identity.go:41.33,43.3 1 11
+github.com/ethereum/go-ethereum/p2p/client_identity.go:53.48,55.2 1 23
+github.com/ethereum/go-ethereum/p2p/client_identity.go:57.77,59.2 1 1
+github.com/ethereum/go-ethereum/p2p/client_identity.go:61.61,63.2 1 2
+github.com/ethereum/go-ethereum/p2p/natpmp.go:21.42,23.2 1 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:25.70,27.16 2 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:30.2,32.8 3 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:27.16,29.3 1 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:36.71,37.18 1 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:42.2,43.16 2 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:46.2,47.8 2 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:37.18,40.3 2 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:43.16,45.3 1 0
+github.com/ethereum/go-ethereum/p2p/natpmp.go:50.103,55.2 2 0
+github.com/ethereum/go-ethereum/p2p/peer_error.go:60.79,62.9 2 17
+github.com/ethereum/go-ethereum/p2p/peer_error.go:65.2,67.34 3 17
+github.com/ethereum/go-ethereum/p2p/peer_error.go:62.9,64.3 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error.go:70.39,72.2 1 15
+github.com/ethereum/go-ethereum/p2p/peer_error.go:74.44,76.2 1 19
+github.com/ethereum/go-ethereum/p2p/protocol.go:81.37,82.38 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:86.2,86.30 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:82.38,84.3 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:95.48,101.2 2 10
+github.com/ethereum/go-ethereum/p2p/protocol.go:103.35,104.22 1 10
+github.com/ethereum/go-ethereum/p2p/protocol.go:104.22,112.3 2 7
+github.com/ethereum/go-ethereum/p2p/protocol.go:115.34,116.2 0 10
+github.com/ethereum/go-ethereum/p2p/protocol.go:118.34,121.2 2 6
+github.com/ethereum/go-ethereum/p2p/protocol.go:123.37,125.2 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:127.41,129.2 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:131.44,133.2 1 16
+github.com/ethereum/go-ethereum/p2p/protocol.go:135.64,138.25 3 8
+github.com/ethereum/go-ethereum/p2p/protocol.go:138.25,140.3 1 8
+github.com/ethereum/go-ethereum/p2p/protocol.go:140.4,142.3 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:145.66,146.32 1 3
+github.com/ethereum/go-ethereum/p2p/protocol.go:176.2,176.17 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:146.32,148.3 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:148.4,149.42 1 2
+github.com/ethereum/go-ethereum/p2p/protocol.go:154.3,154.21 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:149.42,153.4 3 2
+github.com/ethereum/go-ethereum/p2p/protocol.go:155.3,160.5 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:161.3,163.19 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:164.3,164.16 0 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:165.3,167.65 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:170.3,171.25 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:172.3,173.73 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:167.65,169.5 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:179.62,183.2 2 21
+github.com/ethereum/go-ethereum/p2p/protocol.go:185.91,189.22 4 2
+github.com/ethereum/go-ethereum/p2p/protocol.go:189.22,191.3 1 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:194.49,196.16 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:196.16,201.3 4 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:204.53,207.29 3 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:212.2,224.30 4 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:230.2,230.22 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:235.2,235.23 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:241.2,241.82 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:247.2,247.77 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:253.2,253.23 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:263.2,264.20 2 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:268.2,277.8 5 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:207.29,210.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:224.30,227.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:230.22,233.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:235.23,238.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:241.82,244.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:247.77,250.3 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:253.23,255.57 2 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:255.57,258.4 2 0
+github.com/ethereum/go-ethereum/p2p/protocol.go:258.5,260.4 1 1
+github.com/ethereum/go-ethereum/p2p/protocol.go:264.20,267.3 2 3
+github.com/ethereum/go-ethereum/p2p/server.go:32.35,36.2 1 6
+github.com/ethereum/go-ethereum/p2p/server.go:38.60,43.9 5 0
+github.com/ethereum/go-ethereum/p2p/server.go:46.2,46.15 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:43.9,45.3 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:49.59,54.2 4 1
+github.com/ethereum/go-ethereum/p2p/server.go:56.52,61.2 4 0
+github.com/ethereum/go-ethereum/p2p/server.go:63.55,68.2 4 0
+github.com/ethereum/go-ethereum/p2p/server.go:98.129,101.33 2 5
+github.com/ethereum/go-ethereum/p2p/server.go:104.2,130.32 5 5
+github.com/ethereum/go-ethereum/p2p/server.go:133.2,133.13 1 5
+github.com/ethereum/go-ethereum/p2p/server.go:101.33,103.3 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:130.32,132.3 1 10
+github.com/ethereum/go-ethereum/p2p/server.go:136.79,139.2 2 0
+github.com/ethereum/go-ethereum/p2p/server.go:141.74,144.2 2 0
+github.com/ethereum/go-ethereum/p2p/server.go:146.53,148.2 1 1
+github.com/ethereum/go-ethereum/p2p/server.go:150.58,155.16 4 1
+github.com/ethereum/go-ethereum/p2p/server.go:168.2,168.8 1 1
+github.com/ethereum/go-ethereum/p2p/server.go:155.16,157.37 2 1
+github.com/ethereum/go-ethereum/p2p/server.go:161.3,161.25 1 1
+github.com/ethereum/go-ethereum/p2p/server.go:157.37,160.4 2 2
+github.com/ethereum/go-ethereum/p2p/server.go:161.25,163.4 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:163.5,166.4 2 1
+github.com/ethereum/go-ethereum/p2p/server.go:171.45,174.34 3 0
+github.com/ethereum/go-ethereum/p2p/server.go:179.2,179.8 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:174.34,175.18 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:175.18,177.4 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:182.37,186.2 3 1
+github.com/ethereum/go-ethereum/p2p/server.go:190.48,193.9 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:194.2,195.34 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:196.2,196.10 0 0
+github.com/ethereum/go-ethereum/p2p/server.go:200.61,202.2 1 7
+github.com/ethereum/go-ethereum/p2p/server.go:204.43,206.2 1 7
+github.com/ethereum/go-ethereum/p2p/server.go:208.41,210.2 1 7
+github.com/ethereum/go-ethereum/p2p/server.go:212.58,215.34 3 1
+github.com/ethereum/go-ethereum/p2p/server.go:215.34,216.18 1 2
+github.com/ethereum/go-ethereum/p2p/server.go:216.18,218.4 1 2
+github.com/ethereum/go-ethereum/p2p/server.go:223.51,225.12 2 4
+github.com/ethereum/go-ethereum/p2p/server.go:237.2,237.10 1 4
+github.com/ethereum/go-ethereum/p2p/server.go:249.2,249.33 1 4
+github.com/ethereum/go-ethereum/p2p/server.go:225.12,227.17 2 3
+github.com/ethereum/go-ethereum/p2p/server.go:227.17,231.4 3 0
+github.com/ethereum/go-ethereum/p2p/server.go:231.5,235.4 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:237.10,239.17 2 3
+github.com/ethereum/go-ethereum/p2p/server.go:239.17,243.4 3 0
+github.com/ethereum/go-ethereum/p2p/server.go:243.5,247.4 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:252.28,255.18 2 4
+github.com/ethereum/go-ethereum/p2p/server.go:263.2,263.20 1 4
+github.com/ethereum/go-ethereum/p2p/server.go:271.2,277.34 6 4
+github.com/ethereum/go-ethereum/p2p/server.go:282.2,283.32 2 4
+github.com/ethereum/go-ethereum/p2p/server.go:291.2,295.6 3 4
+github.com/ethereum/go-ethereum/p2p/server.go:305.2,305.33 1 4
+github.com/ethereum/go-ethereum/p2p/server.go:255.18,261.3 5 3
+github.com/ethereum/go-ethereum/p2p/server.go:263.20,269.3 5 3
+github.com/ethereum/go-ethereum/p2p/server.go:277.34,278.18 1 8
+github.com/ethereum/go-ethereum/p2p/server.go:278.18,280.4 1 6
+github.com/ethereum/go-ethereum/p2p/server.go:283.32,288.3 1 6
+github.com/ethereum/go-ethereum/p2p/server.go:295.6,296.10 1 8
+github.com/ethereum/go-ethereum/p2p/server.go:297.3,300.26 3 8
+github.com/ethereum/go-ethereum/p2p/server.go:300.26,301.14 1 4
+github.com/ethereum/go-ethereum/p2p/server.go:309.63,310.6 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:310.6,311.10 1 2591
+github.com/ethereum/go-ethereum/p2p/server.go:312.3,313.46 1 2588
+github.com/ethereum/go-ethereum/p2p/server.go:314.3,318.10 4 3
+github.com/ethereum/go-ethereum/p2p/server.go:325.56,330.6 4 3
+github.com/ethereum/go-ethereum/p2p/server.go:330.6,331.10 1 10
+github.com/ethereum/go-ethereum/p2p/server.go:332.3,338.15 3 4
+github.com/ethereum/go-ethereum/p2p/server.go:339.3,346.21 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:347.3,348.31 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:349.3,350.41 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:353.4,355.10 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:350.41,352.5 1 1
+github.com/ethereum/go-ethereum/p2p/server.go:361.61,366.11 4 6
+github.com/ethereum/go-ethereum/p2p/server.go:369.2,369.8 1 6
+github.com/ethereum/go-ethereum/p2p/server.go:366.11,368.3 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:373.73,376.16 3 2588
+github.com/ethereum/go-ethereum/p2p/server.go:383.2,383.16 1 2588
+github.com/ethereum/go-ethereum/p2p/server.go:376.16,379.17 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:379.17,381.4 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:383.16,386.3 2 2585
+github.com/ethereum/go-ethereum/p2p/server.go:386.4,389.3 2 3
+github.com/ethereum/go-ethereum/p2p/server.go:393.84,396.16 3 3
+github.com/ethereum/go-ethereum/p2p/server.go:399.2,399.16 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:396.16,398.3 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:399.16,402.3 2 0
+github.com/ethereum/go-ethereum/p2p/server.go:402.4,404.3 1 3
+github.com/ethereum/go-ethereum/p2p/server.go:408.86,411.17 3 6
+github.com/ethereum/go-ethereum/p2p/server.go:411.17,415.3 3 0
+github.com/ethereum/go-ethereum/p2p/server.go:415.4,424.3 7 6
+github.com/ethereum/go-ethereum/p2p/server.go:428.59,435.17 6 6
+github.com/ethereum/go-ethereum/p2p/server.go:441.2,459.24 13 6
+github.com/ethereum/go-ethereum/p2p/server.go:435.17,439.3 3 0
+github.com/ethereum/go-ethereum/p2p/server.go:463.38,467.2 3 8
+github.com/ethereum/go-ethereum/p2p/server.go:469.74,471.35 1 1
+github.com/ethereum/go-ethereum/p2p/server.go:475.2,477.34 3 1
+github.com/ethereum/go-ethereum/p2p/server.go:482.2,483.12 2 1
+github.com/ethereum/go-ethereum/p2p/server.go:471.35,473.3 1 0
+github.com/ethereum/go-ethereum/p2p/server.go:477.34,478.82 1 2
+github.com/ethereum/go-ethereum/p2p/server.go:478.82,480.4 1 0
+github.com/ethereum/go-ethereum/p2p/connection.go:32.32,35.2 2 18
+github.com/ethereum/go-ethereum/p2p/connection.go:37.33,40.2 2 18
+github.com/ethereum/go-ethereum/p2p/connection.go:42.35,46.2 3 18
+github.com/ethereum/go-ethereum/p2p/connection.go:48.36,52.2 3 18
+github.com/ethereum/go-ethereum/p2p/connection.go:54.72,64.2 1 18
+github.com/ethereum/go-ethereum/p2p/connection.go:66.46,68.2 1 18
+github.com/ethereum/go-ethereum/p2p/connection.go:70.47,72.2 1 19
+github.com/ethereum/go-ethereum/p2p/connection.go:74.51,76.2 1 8
+github.com/ethereum/go-ethereum/p2p/connection.go:78.37,86.6 7 18
+github.com/ethereum/go-ethereum/p2p/connection.go:86.6,89.23 2 304
+github.com/ethereum/go-ethereum/p2p/connection.go:96.3,96.10 1 304
+github.com/ethereum/go-ethereum/p2p/connection.go:89.23,92.4 2 12
+github.com/ethereum/go-ethereum/p2p/connection.go:92.5,94.4 1 292
+github.com/ethereum/go-ethereum/p2p/connection.go:97.3,98.32 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:99.3,100.18 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:112.4,112.46 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:113.3,115.42 2 7
+github.com/ethereum/go-ethereum/p2p/connection.go:120.4,120.46 1 7
+github.com/ethereum/go-ethereum/p2p/connection.go:121.3,122.25 1 7
+github.com/ethereum/go-ethereum/p2p/connection.go:123.3,126.10 3 18
+github.com/ethereum/go-ethereum/p2p/connection.go:100.18,101.43 1 133
+github.com/ethereum/go-ethereum/p2p/connection.go:101.43,103.6 1 129
+github.com/ethereum/go-ethereum/p2p/connection.go:103.7,103.25 1 4
+github.com/ethereum/go-ethereum/p2p/connection.go:103.25,105.6 1 0
+github.com/ethereum/go-ethereum/p2p/connection.go:105.7,107.6 1 4
+github.com/ethereum/go-ethereum/p2p/connection.go:108.6,111.5 2 3
+github.com/ethereum/go-ethereum/p2p/connection.go:115.42,117.5 1 0
+github.com/ethereum/go-ethereum/p2p/connection.go:117.6,119.5 1 7
+github.com/ethereum/go-ethereum/p2p/connection.go:132.38,136.6 4 18
+github.com/ethereum/go-ethereum/p2p/connection.go:136.6,137.35 1 56
+github.com/ethereum/go-ethereum/p2p/connection.go:141.3,141.10 1 56
+github.com/ethereum/go-ethereum/p2p/connection.go:137.35,140.4 2 19
+github.com/ethereum/go-ethereum/p2p/connection.go:142.3,143.38 1 19
+github.com/ethereum/go-ethereum/p2p/connection.go:144.3,145.18 1 19
+github.com/ethereum/go-ethereum/p2p/connection.go:151.3,154.10 3 18
+github.com/ethereum/go-ethereum/p2p/connection.go:145.18,148.5 2 19
+github.com/ethereum/go-ethereum/p2p/connection.go:148.6,150.5 1 0
+github.com/ethereum/go-ethereum/p2p/connection.go:159.43,166.2 4 19
+github.com/ethereum/go-ethereum/p2p/connection.go:168.39,169.34 1 19
+github.com/ethereum/go-ethereum/p2p/connection.go:169.34,173.3 3 0
+github.com/ethereum/go-ethereum/p2p/connection.go:176.69,180.15 4 19
+github.com/ethereum/go-ethereum/p2p/connection.go:184.2,184.13 1 19
+github.com/ethereum/go-ethereum/p2p/connection.go:180.15,183.3 2 0
+github.com/ethereum/go-ethereum/p2p/connection.go:187.74,199.6 8 136
+github.com/ethereum/go-ethereum/p2p/connection.go:248.2,248.13 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:199.6,203.28 1 152
+github.com/ethereum/go-ethereum/p2p/connection.go:218.3,218.12 1 17
+github.com/ethereum/go-ethereum/p2p/connection.go:203.28,205.11 2 145
+github.com/ethereum/go-ethereum/p2p/connection.go:216.4,216.39 1 10
+github.com/ethereum/go-ethereum/p2p/connection.go:205.11,207.38 2 135
+github.com/ethereum/go-ethereum/p2p/connection.go:214.5,214.14 1 135
+github.com/ethereum/go-ethereum/p2p/connection.go:207.38,208.15 1 2
+github.com/ethereum/go-ethereum/p2p/connection.go:208.15,210.7 1 1
+github.com/ethereum/go-ethereum/p2p/connection.go:210.8,212.7 1 1
+github.com/ethereum/go-ethereum/p2p/connection.go:218.12,220.50 1 10
+github.com/ethereum/go-ethereum/p2p/connection.go:224.4,227.18 3 9
+github.com/ethereum/go-ethereum/p2p/connection.go:220.50,222.10 2 1
+github.com/ethereum/go-ethereum/p2p/connection.go:227.18,229.5 1 8
+github.com/ethereum/go-ethereum/p2p/connection.go:229.6,232.5 2 1
+github.com/ethereum/go-ethereum/p2p/connection.go:233.5,239.4 4 7
+github.com/ethereum/go-ethereum/p2p/connection.go:251.82,253.6 2 136
+github.com/ethereum/go-ethereum/p2p/connection.go:274.2,274.13 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:253.6,259.41 4 136
+github.com/ethereum/go-ethereum/p2p/connection.go:259.41,260.21 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:263.4,263.42 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:260.21,262.5 1 10
+github.com/ethereum/go-ethereum/p2p/connection.go:263.42,264.10 1 136
+github.com/ethereum/go-ethereum/p2p/connection.go:266.5,272.4 4 0
+github.com/ethereum/go-ethereum/p2p/message.go:16.33,18.2 1 54
+github.com/ethereum/go-ethereum/p2p/message.go:20.40,22.2 1 5
+github.com/ethereum/go-ethereum/p2p/message.go:24.72,43.2 1 37
+github.com/ethereum/go-ethereum/p2p/message.go:45.60,59.2 5 5
+github.com/ethereum/go-ethereum/p2p/message.go:61.41,63.2 1 5
+github.com/ethereum/go-ethereum/p2p/message.go:67.54,68.28 1 28
+github.com/ethereum/go-ethereum/p2p/message.go:74.2,74.8 1 28
+github.com/ethereum/go-ethereum/p2p/message.go:68.28,71.3 2 27
+github.com/ethereum/go-ethereum/p2p/message.go:71.4,73.3 1 1
+github.com/ethereum/go-ethereum/p2p/messenger.go:28.104,41.2 2 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:43.32,49.2 5 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:51.31,56.42 4 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:59.2,62.19 4 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:56.42,58.3 1 14
+github.com/ethereum/go-ethereum/p2p/messenger.go:65.36,67.6 2 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:67.6,68.10 1 14
+github.com/ethereum/go-ethereum/p2p/messenger.go:69.3,71.10 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:76.3,78.10 2 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:71.10,73.5 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:73.6,75.5 1 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:88.47,97.16 3 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:102.2,103.16 2 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:108.2,114.6 5 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:97.16,100.3 2 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:103.16,106.3 2 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:114.6,115.10 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:116.3,118.10 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:123.3,124.10 1 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:118.10,120.5 1 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:120.6,122.5 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:134.82,138.42 4 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:144.2,144.67 1 0
+github.com/ethereum/go-ethereum/p2p/messenger.go:138.42,139.20 1 5
+github.com/ethereum/go-ethereum/p2p/messenger.go:142.3,142.16 1 1
+github.com/ethereum/go-ethereum/p2p/messenger.go:139.20,141.4 1 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:147.128,152.6 4 8
+github.com/ethereum/go-ethereum/p2p/messenger.go:152.6,153.10 1 19
+github.com/ethereum/go-ethereum/p2p/messenger.go:154.3,155.10 1 10
+github.com/ethereum/go-ethereum/p2p/messenger.go:162.3,163.14 1 9
+github.com/ethereum/go-ethereum/p2p/messenger.go:155.10,158.5 2 3
+github.com/ethereum/go-ethereum/p2p/messenger.go:158.6,161.5 1 7
+github.com/ethereum/go-ethereum/p2p/messenger.go:163.14,167.5 3 1
+github.com/ethereum/go-ethereum/p2p/messenger.go:167.6,172.5 4 8
+github.com/ethereum/go-ethereum/p2p/messenger.go:177.57,182.33 5 3
+github.com/ethereum/go-ethereum/p2p/messenger.go:182.33,184.9 2 5
+github.com/ethereum/go-ethereum/p2p/messenger.go:184.9,194.4 8 4
+github.com/ethereum/go-ethereum/p2p/messenger.go:194.5,197.4 1 1
+github.com/ethereum/go-ethereum/p2p/messenger.go:201.63,206.23 5 26
+github.com/ethereum/go-ethereum/p2p/messenger.go:214.2,216.28 2 24
+github.com/ethereum/go-ethereum/p2p/messenger.go:219.2,219.12 1 24
+github.com/ethereum/go-ethereum/p2p/messenger.go:206.23,209.10 3 5
+github.com/ethereum/go-ethereum/p2p/messenger.go:212.3,212.29 1 3
+github.com/ethereum/go-ethereum/p2p/messenger.go:209.10,211.4 1 2
+github.com/ethereum/go-ethereum/p2p/messenger.go:216.28,218.3 1 18
+github.com/ethereum/go-ethereum/p2p/natupnp.go:23.54,25.16 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:28.2,29.16 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:32.2,36.16 4 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:40.2,49.32 5 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:92.2,93.8 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:25.16,27.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:29.16,31.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:36.16,38.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:49.32,51.17 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:54.3,56.17 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:61.3,62.43 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:67.3,70.19 4 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:73.3,75.19 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:78.3,81.17 4 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:84.3,86.17 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:89.3,90.9 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:51.17,53.4 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:56.17,57.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:62.43,63.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:70.19,71.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:75.19,76.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:81.17,83.4 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:86.17,88.4 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:148.59,150.31 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:155.2,155.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:150.31,151.37 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:151.37,153.4 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:158.62,160.31 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:165.2,165.12 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:160.31,161.39 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:161.39,163.4 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:168.40,170.16 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:173.2,174.30 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:177.2,177.27 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:170.16,172.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:174.30,176.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:180.60,182.16 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:185.2,186.25 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:190.2,193.16 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:196.2,197.75 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:201.2,202.14 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:206.2,207.14 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:211.2,212.14 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:216.2,217.8 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:182.16,184.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:186.25,189.3 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:193.16,195.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:197.75,200.3 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:202.14,205.3 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:207.14,210.3 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:212.14,215.3 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:220.48,226.2 5 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:228.79,234.16 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:237.2,246.16 8 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:250.2,250.19 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:254.2,254.25 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:260.2,260.8 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:234.16,236.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:246.16,248.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:250.19,252.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:254.25,259.3 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:267.64,274.16 4 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:280.2,281.8 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:274.16,276.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:284.65,286.16 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:289.2,290.8 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:286.16,288.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:293.152,307.16 7 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:313.2,315.8 3 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:307.16,309.3 1 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:318.98,327.16 4 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:333.2,334.8 2 0
+github.com/ethereum/go-ethereum/p2p/natupnp.go:327.16,329.3 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:57.55,62.2 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:64.63,70.2 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:72.71,73.26 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:81.2,81.50 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:73.26,75.23 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:79.3,79.21 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:75.23,78.4 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:84.45,85.22 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:99.2,99.8 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:86.2,86.12 0 0
+github.com/ethereum/go-ethereum/p2p/network.go:87.2,89.18 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:94.2,95.42 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:96.2,97.57 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:89.18,91.4 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:91.5,93.4 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:102.32,106.2 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:108.63,110.16 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:115.2,115.8 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:110.16,112.3 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:112.4,114.3 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:118.46,122.6 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:141.2,142.28 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:122.6,123.10 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:124.3,127.53 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:130.3,131.30 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:135.3,137.13 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:127.53,129.5 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:131.30,132.54 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:132.54,133.6 0 0
+github.com/ethereum/go-ethereum/p2p/network.go:142.28,143.73 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:143.73,145.4 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:145.5,147.4 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:151.74,153.16 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:159.2,159.17 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:153.16,158.3 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:162.69,164.16 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:169.2,169.17 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:164.16,168.3 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:172.65,173.39 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:177.2,179.16 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:183.2,183.19 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:188.2,188.18 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:195.2,195.8 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:173.39,175.3 1 0
+github.com/ethereum/go-ethereum/p2p/network.go:179.16,182.3 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:183.19,187.3 3 0
+github.com/ethereum/go-ethereum/p2p/network.go:188.18,192.3 2 0
+github.com/ethereum/go-ethereum/p2p/network.go:192.4,194.3 1 0
+github.com/ethereum/go-ethereum/p2p/peer.go:24.42,26.2 1 9
+github.com/ethereum/go-ethereum/p2p/peer.go:28.51,30.2 1 0
+github.com/ethereum/go-ethereum/p2p/peer.go:32.36,34.2 1 9
+github.com/ethereum/go-ethereum/p2p/peer.go:36.83,52.2 8 7
+github.com/ethereum/go-ethereum/p2p/peer.go:54.35,56.18 2 20
+github.com/ethereum/go-ethereum/p2p/peer.go:61.2,61.89 1 18
+github.com/ethereum/go-ethereum/p2p/peer.go:56.18,58.3 1 9
+github.com/ethereum/go-ethereum/p2p/peer.go:58.4,60.3 1 9
+github.com/ethereum/go-ethereum/p2p/peer.go:64.58,66.2 1 24
+github.com/ethereum/go-ethereum/p2p/peer.go:68.27,71.2 2 7
+github.com/ethereum/go-ethereum/p2p/peer.go:73.26,79.2 2 7
+github.com/ethereum/go-ethereum/p2p/peer.go:81.39,83.2 1 2
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:25.153,33.2 1 8
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:35.39,37.2 1 8
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:39.38,43.2 3 8
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:45.40,46.6 1 8
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:46.6,47.10 1 19
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:48.3,49.10 1 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:55.3,57.10 2 8
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:49.10,52.5 2 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:52.6,54.5 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:62.60,64.24 2 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:83.2,83.40 1 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:86.2,86.31 1 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:65.2,66.35 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:67.2,68.31 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:69.2,70.27 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:71.2,72.29 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:73.2,74.27 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:75.2,76.28 1 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:77.2,78.32 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:79.2,80.47 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:83.40,85.3 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:86.31,91.3 1 11
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:94.69,95.24 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:96.2,97.11 1 0
+github.com/ethereum/go-ethereum/p2p/peer_error_handler.go:98.2,99.11 1 0
+github.com/ethereum/go-ethereum/pow/ar/ops.go:11.13,21.2 9 1
+github.com/ethereum/go-ethereum/pow/ar/ops.go:23.34,25.2 1 899964
+github.com/ethereum/go-ethereum/pow/ar/ops.go:26.34,28.2 1 6
+github.com/ethereum/go-ethereum/pow/ar/ops.go:29.34,31.2 1 12
+github.com/ethereum/go-ethereum/pow/ar/ops.go:32.34,34.2 1 12
+github.com/ethereum/go-ethereum/pow/ar/ops.go:35.34,37.2 1 0
+github.com/ethereum/go-ethereum/pow/ar/ops.go:38.33,40.2 1 0
+github.com/ethereum/go-ethereum/pow/ar/ops.go:41.35,46.2 3 6
+github.com/ethereum/go-ethereum/pow/ar/ops.go:47.37,51.2 2 6
+github.com/ethereum/go-ethereum/pow/ar/ops.go:52.34,54.2 1 0
+github.com/ethereum/go-ethereum/pow/ar/pow.go:19.33,21.2 1 1
+github.com/ethereum/go-ethereum/pow/ar/pow.go:23.56,26.32 2 1
+github.com/ethereum/go-ethereum/pow/ar/pow.go:26.32,31.23 4 150000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:37.3,38.49 2 150000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:31.23,33.4 1 149979
+github.com/ethereum/go-ethereum/pow/ar/pow.go:33.5,35.4 1 21
+github.com/ethereum/go-ethereum/pow/ar/pow.go:42.69,44.32 2 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:48.2,48.30 1 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:55.2,56.34 2 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:74.2,74.18 1 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:44.32,46.3 1 60000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:48.30,53.3 3 900000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:56.34,58.10 2 9000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:68.3,69.65 2 9000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:58.10,59.29 1 9000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:59.29,61.5 1 900000
+github.com/ethereum/go-ethereum/pow/ar/pow.go:62.5,63.29 1 0
+github.com/ethereum/go-ethereum/pow/ar/pow.go:63.29,65.5 1 0
+github.com/ethereum/go-ethereum/pow/ar/pow.go:69.65,71.4 1 0
+github.com/ethereum/go-ethereum/pow/ar/pow.go:77.53,94.2 12 0
+github.com/ethereum/go-ethereum/pow/ar/pow.go:96.45,104.6 6 1
+github.com/ethereum/go-ethereum/pow/ar/pow.go:104.6,105.54 1 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:110.3,116.51 5 6
+github.com/ethereum/go-ethereum/pow/ar/pow.go:105.54,108.4 2 1
+github.com/ethereum/go-ethereum/pow/ar/pow.go:116.51,118.4 1 1
+github.com/ethereum/go-ethereum/pow/ar/pow.go:118.5,120.4 1 5
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:18.37,20.2 1 0
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:22.35,23.31 1 510007
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:36.2,36.12 1 0
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:23.31,25.3 1 509988
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:25.4,25.43 1 19
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:25.43,27.3 1 13
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:27.4,27.40 1 6
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:27.40,29.23 2 6
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:33.3,33.54 1 6
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:29.23,31.4 1 60000
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:48.26,50.2 1 7
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:52.43,57.46 3 510021
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:61.2,61.10 1 510021
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:57.46,59.3 1 509988
+github.com/ethereum/go-ethereum/pow/ar/rnd.go:64.42,66.2 1 450021
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:7.36,9.2 1 0
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:11.45,13.2 1 0
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:15.42,17.2 1 2
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:20.36,20.50 1 0
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:21.36,21.51 1 0
+github.com/ethereum/go-ethereum/ptrie/hashnode.go:22.36,22.51 1 0
+github.com/ethereum/go-ethereum/ptrie/node.go:17.51,17.78 1 0
+github.com/ethereum/go-ethereum/ptrie/node.go:18.51,18.78 1 0
+github.com/ethereum/go-ethereum/ptrie/node.go:19.51,19.78 1 2
+github.com/ethereum/go-ethereum/ptrie/node.go:20.51,20.91 1 81
+github.com/ethereum/go-ethereum/ptrie/node.go:21.51,21.90 1 18
+github.com/ethereum/go-ethereum/ptrie/node.go:24.50,26.34 2 12
+github.com/ethereum/go-ethereum/ptrie/node.go:34.2,34.42 1 12
+github.com/ethereum/go-ethereum/ptrie/node.go:26.34,27.18 1 204
+github.com/ethereum/go-ethereum/ptrie/node.go:27.18,29.4 1 95
+github.com/ethereum/go-ethereum/ptrie/node.go:29.5,31.4 1 109
+github.com/ethereum/go-ethereum/ptrie/node.go:38.51,40.2 1 49
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:11.63,13.2 1 147
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:14.37,18.2 2 85
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:19.37,19.52 1 0
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:20.37,20.52 1 0
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:22.46,24.2 1 97
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:25.43,27.2 1 76
+github.com/ethereum/go-ethereum/ptrie/shortnode.go:29.37,31.2 1 85
+github.com/ethereum/go-ethereum/ptrie/trie.go:19.42,21.2 1 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:22.48,24.2 1 76
+github.com/ethereum/go-ethereum/ptrie/trie.go:33.23,35.2 1 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:37.46,46.2 6 2
+github.com/ethereum/go-ethereum/ptrie/trie.go:49.33,49.55 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:50.33,52.22 2 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:63.2,65.13 2 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:52.22,54.33 2 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:54.33,56.4 1 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:56.5,58.4 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:59.4,61.3 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:68.56,68.106 1 74
+github.com/ethereum/go-ethereum/ptrie/trie.go:69.50,75.21 4 74
+github.com/ethereum/go-ethereum/ptrie/trie.go:81.2,81.18 1 74
+github.com/ethereum/go-ethereum/ptrie/trie.go:75.21,77.3 1 70
+github.com/ethereum/go-ethereum/ptrie/trie.go:77.4,79.3 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:84.48,84.80 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:85.42,92.14 5 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:96.2,96.12 1 1
+github.com/ethereum/go-ethereum/ptrie/trie.go:92.14,94.3 1 3
+github.com/ethereum/go-ethereum/ptrie/trie.go:99.49,99.84 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:100.43,108.2 5 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:110.66,111.19 1 298
+github.com/ethereum/go-ethereum/ptrie/trie.go:115.2,115.17 1 285
+github.com/ethereum/go-ethereum/ptrie/trie.go:119.2,119.29 1 206
+github.com/ethereum/go-ethereum/ptrie/trie.go:111.19,113.3 1 13
+github.com/ethereum/go-ethereum/ptrie/trie.go:115.17,117.3 1 79
+github.com/ethereum/go-ethereum/ptrie/trie.go:120.2,123.26 3 76
+github.com/ethereum/go-ethereum/ptrie/trie.go:127.3,129.28 3 76
+github.com/ethereum/go-ethereum/ptrie/trie.go:139.3,139.23 1 76
+github.com/ethereum/go-ethereum/ptrie/trie.go:143.3,143.50 1 63
+github.com/ethereum/go-ethereum/ptrie/trie.go:145.2,149.13 3 130
+github.com/ethereum/go-ethereum/ptrie/trie.go:151.2,152.24 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:123.26,125.4 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:129.28,131.4 1 54
+github.com/ethereum/go-ethereum/ptrie/trie.go:131.5,138.4 6 22
+github.com/ethereum/go-ethereum/ptrie/trie.go:139.23,141.4 1 13
+github.com/ethereum/go-ethereum/ptrie/trie.go:156.51,157.19 1 15
+github.com/ethereum/go-ethereum/ptrie/trie.go:161.2,161.17 1 12
+github.com/ethereum/go-ethereum/ptrie/trie.go:165.2,165.29 1 12
+github.com/ethereum/go-ethereum/ptrie/trie.go:157.19,159.3 1 3
+github.com/ethereum/go-ethereum/ptrie/trie.go:161.17,163.3 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:166.2,170.57 3 5
+github.com/ethereum/go-ethereum/ptrie/trie.go:174.3,174.13 1 1
+github.com/ethereum/go-ethereum/ptrie/trie.go:175.2,176.45 1 7
+github.com/ethereum/go-ethereum/ptrie/trie.go:177.2,178.24 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:170.57,172.4 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:182.54,183.19 1 10
+github.com/ethereum/go-ethereum/ptrie/trie.go:187.2,187.29 1 10
+github.com/ethereum/go-ethereum/ptrie/trie.go:183.19,185.3 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:188.2,191.26 3 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:210.2,215.27 4 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:225.3,226.16 2 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:242.3,242.15 1 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:244.2,245.24 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:191.26,193.4 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:193.5,193.42 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:193.42,197.33 3 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:205.4,205.12 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:198.4,200.48 2 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:201.4,202.44 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:206.5,208.4 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:215.27,216.29 1 102
+github.com/ethereum/go-ethereum/ptrie/trie.go:216.29,217.18 1 10
+github.com/ethereum/go-ethereum/ptrie/trie.go:217.18,219.6 1 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:219.7,221.6 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:226.16,228.4 1 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:228.5,228.22 1 6
+github.com/ethereum/go-ethereum/ptrie/trie.go:228.22,230.33 2 2
+github.com/ethereum/go-ethereum/ptrie/trie.go:231.4,234.49 2 0
+github.com/ethereum/go-ethereum/ptrie/trie.go:235.4,236.68 1 2
+github.com/ethereum/go-ethereum/ptrie/trie.go:238.5,240.4 1 4
+github.com/ethereum/go-ethereum/ptrie/trie.go:250.53,252.11 2 95
+github.com/ethereum/go-ethereum/ptrie/trie.go:253.2,254.105 1 3
+github.com/ethereum/go-ethereum/ptrie/trie.go:255.2,257.26 2 5
+github.com/ethereum/go-ethereum/ptrie/trie.go:260.3,260.15 1 5
+github.com/ethereum/go-ethereum/ptrie/trie.go:261.2,262.34 1 25
+github.com/ethereum/go-ethereum/ptrie/trie.go:263.2,264.41 1 62
+github.com/ethereum/go-ethereum/ptrie/trie.go:257.26,259.4 1 85
+github.com/ethereum/go-ethereum/ptrie/trie.go:268.41,269.29 1 200
+github.com/ethereum/go-ethereum/ptrie/trie.go:270.2,272.28 2 5
+github.com/ethereum/go-ethereum/ptrie/trie.go:273.2,274.14 1 195
+github.com/ethereum/go-ethereum/ptrie/trie.go:278.48,280.21 2 103
+github.com/ethereum/go-ethereum/ptrie/trie.go:287.2,287.23 1 27
+github.com/ethereum/go-ethereum/ptrie/trie.go:280.21,285.3 3 76
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:8.46,8.61 1 0
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:9.46,9.66 1 3
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:10.46,10.61 1 0
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:11.46,11.61 1 0
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:12.46,12.66 1 0
+github.com/ethereum/go-ethereum/ptrie/valuenode.go:13.46,13.66 1 135
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:8.37,10.2 1 27
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:12.36,12.51 1 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:13.36,16.2 2 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:18.35,18.50 1 136
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:21.42,22.34 1 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:28.2,28.8 1 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:22.34,23.18 1 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:23.18,25.4 1 0
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:31.42,33.2 1 27
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:35.45,37.34 2 33
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:45.2,45.10 1 33
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:37.34,38.18 1 561
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:38.18,40.4 1 136
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:40.5,42.4 1 425
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:48.47,50.2 1 265
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:52.40,53.31 1 249
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:58.2,58.12 1 134
+github.com/ethereum/go-ethereum/ptrie/fullnode.go:53.31,57.3 2 115
+github.com/ethereum/go-ethereum/rlp/decode.go:69.50,71.2 1 73
+github.com/ethereum/go-ethereum/rlp/decode.go:73.47,75.9 2 2
+github.com/ethereum/go-ethereum/rlp/decode.go:76.2,77.19 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:78.2,79.20 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:80.2,81.23 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:85.52,87.16 2 36
+github.com/ethereum/go-ethereum/rlp/decode.go:90.2,91.12 2 31
+github.com/ethereum/go-ethereum/rlp/decode.go:87.16,89.3 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:94.53,96.16 2 24
+github.com/ethereum/go-ethereum/rlp/decode.go:99.2,100.12 2 16
+github.com/ethereum/go-ethereum/rlp/decode.go:96.16,98.3 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:103.55,105.16 2 7
+github.com/ethereum/go-ethereum/rlp/decode.go:108.2,109.12 2 5
+github.com/ethereum/go-ethereum/rlp/decode.go:105.16,107.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:112.60,114.2 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:116.55,118.16 2 4
+github.com/ethereum/go-ethereum/rlp/decode.go:121.2,122.14 2 3
+github.com/ethereum/go-ethereum/rlp/decode.go:126.2,127.12 2 3
+github.com/ethereum/go-ethereum/rlp/decode.go:118.16,120.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:122.14,125.3 2 2
+github.com/ethereum/go-ethereum/rlp/decode.go:132.57,134.89 2 8
+github.com/ethereum/go-ethereum/rlp/decode.go:141.2,142.16 2 5
+github.com/ethereum/go-ethereum/rlp/decode.go:145.2,146.33 2 5
+github.com/ethereum/go-ethereum/rlp/decode.go:149.2,149.50 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:152.2,152.17 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:134.89,135.34 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:135.34,137.4 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:137.5,139.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:142.16,144.3 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:146.33,148.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:149.50,151.3 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:161.83,163.16 2 20
+github.com/ethereum/go-ethereum/rlp/decode.go:166.2,166.15 1 20
+github.com/ethereum/go-ethereum/rlp/decode.go:175.2,176.6 2 14
+github.com/ethereum/go-ethereum/rlp/decode.go:203.2,203.19 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:211.2,211.20 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:163.16,165.3 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:166.15,167.34 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:172.3,172.21 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:167.34,169.4 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:169.5,171.4 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:176.6,177.18 1 49
+github.com/ethereum/go-ethereum/rlp/decode.go:180.3,180.34 1 48
+github.com/ethereum/go-ethereum/rlp/decode.go:196.3,196.50 1 48
+github.com/ethereum/go-ethereum/rlp/decode.go:201.3,201.6 1 35
+github.com/ethereum/go-ethereum/rlp/decode.go:177.18,179.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:180.34,182.22 1 23
+github.com/ethereum/go-ethereum/rlp/decode.go:191.4,191.22 1 23
+github.com/ethereum/go-ethereum/rlp/decode.go:182.22,184.19 2 9
+github.com/ethereum/go-ethereum/rlp/decode.go:187.5,189.18 3 9
+github.com/ethereum/go-ethereum/rlp/decode.go:184.19,186.6 1 7
+github.com/ethereum/go-ethereum/rlp/decode.go:191.22,193.5 1 23
+github.com/ethereum/go-ethereum/rlp/decode.go:196.50,197.9 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:198.5,198.24 1 37
+github.com/ethereum/go-ethereum/rlp/decode.go:198.24,200.4 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:203.19,204.34 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:204.34,207.4 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:207.5,209.4 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:214.58,216.16 2 8
+github.com/ethereum/go-ethereum/rlp/decode.go:219.2,219.18 1 7
+github.com/ethereum/go-ethereum/rlp/decode.go:222.2,223.16 2 4
+github.com/ethereum/go-ethereum/rlp/decode.go:226.2,226.12 1 4
+github.com/ethereum/go-ethereum/rlp/decode.go:216.16,218.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:219.18,221.3 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:223.16,225.3 1 4
+github.com/ethereum/go-ethereum/rlp/decode.go:231.58,233.16 2 18
+github.com/ethereum/go-ethereum/rlp/decode.go:236.2,236.14 1 18
+github.com/ethereum/go-ethereum/rlp/decode.go:256.2,256.12 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:233.16,235.3 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:237.2,238.21 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:241.3,243.15 3 2
+github.com/ethereum/go-ethereum/rlp/decode.go:244.2,245.31 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:248.3,249.43 2 7
+github.com/ethereum/go-ethereum/rlp/decode.go:252.3,252.23 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:253.2,254.51 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:238.21,240.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:245.31,247.4 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:249.43,251.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:259.41,261.37 2 14
+github.com/ethereum/go-ethereum/rlp/decode.go:261.37,263.3 1 35
+github.com/ethereum/go-ethereum/rlp/decode.go:271.59,273.38 2 4
+github.com/ethereum/go-ethereum/rlp/decode.go:282.2,282.56 1 4
+github.com/ethereum/go-ethereum/rlp/decode.go:300.2,300.17 1 4
+github.com/ethereum/go-ethereum/rlp/decode.go:273.38,274.41 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:274.41,276.18 2 10
+github.com/ethereum/go-ethereum/rlp/decode.go:279.4,279.43 1 10
+github.com/ethereum/go-ethereum/rlp/decode.go:276.18,278.5 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:282.56,283.36 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:286.3,286.28 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:295.3,295.44 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:298.3,298.13 1 9
+github.com/ethereum/go-ethereum/rlp/decode.go:283.36,285.4 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:286.28,288.18 2 19
+github.com/ethereum/go-ethereum/rlp/decode.go:288.18,290.10 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:291.6,291.25 1 16
+github.com/ethereum/go-ethereum/rlp/decode.go:291.25,293.5 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:295.44,297.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:303.56,306.16 3 5
+github.com/ethereum/go-ethereum/rlp/decode.go:309.2,309.56 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:324.2,324.17 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:306.16,308.3 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:309.56,311.48 2 13
+github.com/ethereum/go-ethereum/rlp/decode.go:315.3,316.18 2 8
+github.com/ethereum/go-ethereum/rlp/decode.go:319.3,319.60 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:322.3,322.13 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:311.48,314.4 2 5
+github.com/ethereum/go-ethereum/rlp/decode.go:316.18,318.4 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:319.60,321.4 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:329.58,331.16 2 9
+github.com/ethereum/go-ethereum/rlp/decode.go:334.2,334.18 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:347.2,347.12 1 8
+github.com/ethereum/go-ethereum/rlp/decode.go:331.16,333.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:334.18,336.71 2 2
+github.com/ethereum/go-ethereum/rlp/decode.go:339.3,339.17 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:336.71,338.4 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:340.4,342.17 2 6
+github.com/ethereum/go-ethereum/rlp/decode.go:345.3,345.30 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:342.17,344.4 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:352.61,354.2 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:356.56,361.46 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:364.2,364.47 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:361.46,363.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:376.31,377.11 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:378.2,379.16 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:380.2,381.18 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:382.2,383.16 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:384.2,385.39 1 0
+github.com/ethereum/go-ethereum/rlp/decode.go:435.38,437.2 1 109
+github.com/ethereum/go-ethereum/rlp/decode.go:442.42,444.16 2 25
+github.com/ethereum/go-ethereum/rlp/decode.go:447.2,447.14 1 23
+github.com/ethereum/go-ethereum/rlp/decode.go:444.16,446.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:448.2,450.32 2 8
+github.com/ethereum/go-ethereum/rlp/decode.go:451.2,453.38 2 12
+github.com/ethereum/go-ethereum/rlp/decode.go:456.3,456.16 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:457.2,458.32 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:453.38,455.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:465.41,467.2 1 31
+github.com/ethereum/go-ethereum/rlp/decode.go:469.52,471.16 2 91
+github.com/ethereum/go-ethereum/rlp/decode.go:474.2,474.14 1 75
+github.com/ethereum/go-ethereum/rlp/decode.go:471.16,473.3 1 16
+github.com/ethereum/go-ethereum/rlp/decode.go:475.2,477.32 2 62
+github.com/ethereum/go-ethereum/rlp/decode.go:478.2,479.31 1 11
+github.com/ethereum/go-ethereum/rlp/decode.go:482.3,482.32 1 7
+github.com/ethereum/go-ethereum/rlp/decode.go:483.2,484.30 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:479.31,481.4 1 4
+github.com/ethereum/go-ethereum/rlp/decode.go:491.50,493.16 2 40
+github.com/ethereum/go-ethereum/rlp/decode.go:496.2,496.18 1 39
+github.com/ethereum/go-ethereum/rlp/decode.go:499.2,502.18 4 37
+github.com/ethereum/go-ethereum/rlp/decode.go:493.16,495.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:496.18,498.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:507.34,508.23 1 31
+github.com/ethereum/go-ethereum/rlp/decode.go:511.2,512.25 2 30
+github.com/ethereum/go-ethereum/rlp/decode.go:515.2,516.22 2 28
+github.com/ethereum/go-ethereum/rlp/decode.go:519.2,521.12 3 28
+github.com/ethereum/go-ethereum/rlp/decode.go:508.23,510.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:512.25,514.3 1 2
+github.com/ethereum/go-ethereum/rlp/decode.go:516.22,518.3 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:527.48,528.16 1 73
+github.com/ethereum/go-ethereum/rlp/decode.go:531.2,533.32 3 72
+github.com/ethereum/go-ethereum/rlp/decode.go:536.2,536.18 1 71
+github.com/ethereum/go-ethereum/rlp/decode.go:539.2,540.16 2 70
+github.com/ethereum/go-ethereum/rlp/decode.go:543.2,543.37 1 69
+github.com/ethereum/go-ethereum/rlp/decode.go:528.16,530.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:533.32,535.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:536.18,538.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:540.16,542.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:557.61,559.22 2 224
+github.com/ethereum/go-ethereum/rlp/decode.go:562.2,562.16 1 224
+github.com/ethereum/go-ethereum/rlp/decode.go:572.2,572.45 1 201
+github.com/ethereum/go-ethereum/rlp/decode.go:575.2,575.28 1 200
+github.com/ethereum/go-ethereum/rlp/decode.go:559.22,561.3 1 94
+github.com/ethereum/go-ethereum/rlp/decode.go:562.16,563.40 1 192
+github.com/ethereum/go-ethereum/rlp/decode.go:566.3,567.17 2 175
+github.com/ethereum/go-ethereum/rlp/decode.go:570.3,570.30 1 169
+github.com/ethereum/go-ethereum/rlp/decode.go:563.40,565.4 1 17
+github.com/ethereum/go-ethereum/rlp/decode.go:567.17,569.4 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:572.45,574.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:578.65,580.16 2 175
+github.com/ethereum/go-ethereum/rlp/decode.go:583.2,584.9 2 170
+github.com/ethereum/go-ethereum/rlp/decode.go:580.16,582.3 1 5
+github.com/ethereum/go-ethereum/rlp/decode.go:585.2,589.22 2 76
+github.com/ethereum/go-ethereum/rlp/decode.go:590.2,595.39 1 37
+github.com/ethereum/go-ethereum/rlp/decode.go:596.2,604.27 2 6
+github.com/ethereum/go-ethereum/rlp/decode.go:605.2,611.37 1 47
+github.com/ethereum/go-ethereum/rlp/decode.go:612.2,620.25 2 4
+github.com/ethereum/go-ethereum/rlp/decode.go:624.54,625.15 1 17
+github.com/ethereum/go-ethereum/rlp/decode.go:632.2,633.29 2 11
+github.com/ethereum/go-ethereum/rlp/decode.go:636.2,637.48 2 11
+github.com/ethereum/go-ethereum/rlp/decode.go:625.15,627.20 2 6
+github.com/ethereum/go-ethereum/rlp/decode.go:630.3,630.24 1 6
+github.com/ethereum/go-ethereum/rlp/decode.go:627.20,629.4 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:633.29,635.3 1 44
+github.com/ethereum/go-ethereum/rlp/decode.go:640.51,643.33 3 30
+github.com/ethereum/go-ethereum/rlp/decode.go:647.2,647.19 1 30
+github.com/ethereum/go-ethereum/rlp/decode.go:650.2,650.12 1 30
+github.com/ethereum/go-ethereum/rlp/decode.go:643.33,646.3 2 27
+github.com/ethereum/go-ethereum/rlp/decode.go:647.19,649.3 1 3
+github.com/ethereum/go-ethereum/rlp/decode.go:653.43,656.39 3 181
+github.com/ethereum/go-ethereum/rlp/decode.go:659.2,659.15 1 181
+github.com/ethereum/go-ethereum/rlp/decode.go:656.39,658.3 1 1
+github.com/ethereum/go-ethereum/rlp/decode.go:662.37,664.22 2 211
+github.com/ethereum/go-ethereum/rlp/decode.go:664.22,666.3 1 76
+github.com/ethereum/go-ethereum/rlp/typecache.go:21.58,25.17 4 70
+github.com/ethereum/go-ethereum/rlp/typecache.go:29.2,31.29 3 21
+github.com/ethereum/go-ethereum/rlp/typecache.go:25.17,27.3 1 49
+github.com/ethereum/go-ethereum/rlp/typecache.go:34.59,36.17 2 41
+github.com/ethereum/go-ethereum/rlp/typecache.go:43.2,45.16 3 27
+github.com/ethereum/go-ethereum/rlp/typecache.go:50.2,51.28 2 26
+github.com/ethereum/go-ethereum/rlp/typecache.go:36.17,39.3 1 14
+github.com/ethereum/go-ethereum/rlp/typecache.go:45.16,49.3 2 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:59.64,62.9 3 27
+github.com/ethereum/go-ethereum/rlp/typecache.go:86.2,86.18 1 27
+github.com/ethereum/go-ethereum/rlp/typecache.go:63.2,64.31 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:65.2,66.36 1 2
+github.com/ethereum/go-ethereum/rlp/typecache.go:67.2,68.30 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:69.2,70.35 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:71.2,72.37 1 2
+github.com/ethereum/go-ethereum/rlp/typecache.go:73.2,74.30 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:75.2,76.43 1 8
+github.com/ethereum/go-ethereum/rlp/typecache.go:77.2,78.45 1 4
+github.com/ethereum/go-ethereum/rlp/typecache.go:79.2,80.42 1 5
+github.com/ethereum/go-ethereum/rlp/typecache.go:81.2,82.33 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:83.2,84.64 1 1
+github.com/ethereum/go-ethereum/rlp/typecache.go:89.37,91.2 1 22
+github.com/ethereum/go-ethereum/state/dump.go:23.34,29.70 2 1
+github.com/ethereum/go-ethereum/state/dump.go:42.2,43.16 2 1
+github.com/ethereum/go-ethereum/state/dump.go:47.2,47.13 1 1
+github.com/ethereum/go-ethereum/state/dump.go:29.70,35.66 4 0
+github.com/ethereum/go-ethereum/state/dump.go:39.3,39.59 1 0
+github.com/ethereum/go-ethereum/state/dump.go:35.66,38.4 2 0
+github.com/ethereum/go-ethereum/state/dump.go:43.16,45.3 1 0
+github.com/ethereum/go-ethereum/state/dump.go:51.48,53.59 2 0
+github.com/ethereum/go-ethereum/state/dump.go:53.59,55.3 1 0
+github.com/ethereum/go-ethereum/state/errors.go:13.36,17.2 2 0
+github.com/ethereum/go-ethereum/state/errors.go:18.40,20.2 1 0
+github.com/ethereum/go-ethereum/state/errors.go:21.51,23.2 1 0
+github.com/ethereum/go-ethereum/state/log.go:16.51,23.16 3 0
+github.com/ethereum/go-ethereum/state/log.go:27.2,27.12 1 0
+github.com/ethereum/go-ethereum/state/log.go:23.16,25.3 1 0
+github.com/ethereum/go-ethereum/state/log.go:30.40,32.2 1 0
+github.com/ethereum/go-ethereum/state/log.go:34.34,36.2 1 0
+github.com/ethereum/go-ethereum/state/log.go:40.40,42.27 2 0
+github.com/ethereum/go-ethereum/state/log.go:46.2,46.13 1 0
+github.com/ethereum/go-ethereum/state/log.go:42.27,44.3 1 0
+github.com/ethereum/go-ethereum/state/log.go:49.34,51.27 2 0
+github.com/ethereum/go-ethereum/state/log.go:54.2,54.47 1 0
+github.com/ethereum/go-ethereum/state/log.go:51.27,53.3 1 0
+github.com/ethereum/go-ethereum/state/manifest.go:16.30,21.2 3 6
+github.com/ethereum/go-ethereum/state/manifest.go:23.28,25.2 1 6
+github.com/ethereum/go-ethereum/state/manifest.go:27.57,31.2 2 0
+github.com/ethereum/go-ethereum/state/manifest.go:49.52,51.2 1 0
+github.com/ethereum/go-ethereum/state/manifest.go:53.38,55.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:32.34,34.2 1 6
+github.com/ethereum/go-ethereum/state/state.go:36.32,38.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:40.37,42.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:44.32,46.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:49.53,51.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:55.2,55.21 1 0
+github.com/ethereum/go-ethereum/state/state.go:51.24,53.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:58.61,61.38 2 0
+github.com/ethereum/go-ethereum/state/state.go:65.2,65.66 1 0
+github.com/ethereum/go-ethereum/state/state.go:61.38,63.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:68.61,70.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:70.24,72.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:75.49,77.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:81.2,81.10 1 0
+github.com/ethereum/go-ethereum/state/state.go:77.24,79.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:84.56,86.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:86.24,88.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:91.48,93.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:97.2,97.12 1 0
+github.com/ethereum/go-ethereum/state/state.go:93.24,95.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:100.49,102.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:106.2,106.12 1 0
+github.com/ethereum/go-ethereum/state/state.go:102.24,104.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:109.66,111.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:111.24,113.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:116.45,118.24 2 0
+github.com/ethereum/go-ethereum/state/state.go:124.2,124.14 1 0
+github.com/ethereum/go-ethereum/state/state.go:118.24,122.3 2 0
+github.com/ethereum/go-ethereum/state/state.go:132.64,135.37 2 0
+github.com/ethereum/go-ethereum/state/state.go:139.2,139.65 1 0
+github.com/ethereum/go-ethereum/state/state.go:135.37,137.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:143.64,147.2 2 0
+github.com/ethereum/go-ethereum/state/state.go:150.61,154.24 3 3
+github.com/ethereum/go-ethereum/state/state.go:158.2,159.20 2 1
+github.com/ethereum/go-ethereum/state/state.go:163.2,166.20 3 0
+github.com/ethereum/go-ethereum/state/state.go:154.24,156.3 1 2
+github.com/ethereum/go-ethereum/state/state.go:159.20,161.3 1 1
+github.com/ethereum/go-ethereum/state/state.go:169.56,171.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:174.66,176.24 2 1
+github.com/ethereum/go-ethereum/state/state.go:180.2,180.20 1 1
+github.com/ethereum/go-ethereum/state/state.go:176.24,178.3 1 1
+github.com/ethereum/go-ethereum/state/state.go:184.61,193.2 5 1
+github.com/ethereum/go-ethereum/state/state.go:196.57,198.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:204.40,206.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:208.34,209.22 1 2
+github.com/ethereum/go-ethereum/state/state.go:226.2,226.12 1 0
+github.com/ethereum/go-ethereum/state/state.go:209.22,211.49 2 2
+github.com/ethereum/go-ethereum/state/state.go:215.3,215.41 1 2
+github.com/ethereum/go-ethereum/state/state.go:219.3,223.15 4 2
+github.com/ethereum/go-ethereum/state/state.go:211.49,213.4 1 1
+github.com/ethereum/go-ethereum/state/state.go:215.41,217.4 1 0
+github.com/ethereum/go-ethereum/state/state.go:229.38,230.18 1 1
+github.com/ethereum/go-ethereum/state/state.go:234.2,237.24 4 1
+github.com/ethereum/go-ethereum/state/state.go:230.18,232.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:240.31,242.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:245.25,249.45 2 0
+github.com/ethereum/go-ethereum/state/state.go:258.2,258.11 1 0
+github.com/ethereum/go-ethereum/state/state.go:249.45,250.31 1 0
+github.com/ethereum/go-ethereum/state/state.go:255.3,255.22 1 0
+github.com/ethereum/go-ethereum/state/state.go:250.31,251.12 1 0
+github.com/ethereum/go-ethereum/state/state.go:262.24,264.45 1 0
+github.com/ethereum/go-ethereum/state/state.go:272.2,274.11 2 0
+github.com/ethereum/go-ethereum/state/state.go:264.45,265.31 1 0
+github.com/ethereum/go-ethereum/state/state.go:269.3,269.27 1 0
+github.com/ethereum/go-ethereum/state/state.go:265.31,266.12 1 0
+github.com/ethereum/go-ethereum/state/state.go:277.28,280.2 2 0
+github.com/ethereum/go-ethereum/state/state.go:282.29,286.40 2 0
+github.com/ethereum/go-ethereum/state/state.go:290.2,290.48 1 0
+github.com/ethereum/go-ethereum/state/state.go:302.2,302.13 1 0
+github.com/ethereum/go-ethereum/state/state.go:286.40,288.3 1 0
+github.com/ethereum/go-ethereum/state/state.go:290.48,291.25 1 0
+github.com/ethereum/go-ethereum/state/state.go:291.25,294.4 2 0
+github.com/ethereum/go-ethereum/state/state.go:294.5,298.4 2 0
+github.com/ethereum/go-ethereum/state/state.go:302.13,304.13 2 0
+github.com/ethereum/go-ethereum/state/state.go:304.13,308.4 2 0
+github.com/ethereum/go-ethereum/state/state.go:312.41,314.2 1 0
+github.com/ethereum/go-ethereum/state/state.go:317.42,318.48 1 0
+github.com/ethereum/go-ethereum/state/state.go:318.48,320.3 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:14.34,16.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:20.36,22.31 2 1
+github.com/ethereum/go-ethereum/state/state_object.go:27.2,27.12 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:22.31,25.3 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:55.34,58.2 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:60.47,70.2 6 2
+github.com/ethereum/go-ethereum/state/state_object.go:72.78,78.2 4 0
+github.com/ethereum/go-ethereum/state/state_object.go:80.65,85.2 3 0
+github.com/ethereum/go-ethereum/state/state_object.go:87.44,90.2 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:92.59,94.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:96.63,98.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:100.66,102.2 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:103.73,105.2 1 2
+github.com/ethereum/go-ethereum/state/state_object.go:107.62,109.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:111.60,115.18 3 1
+github.com/ethereum/go-ethereum/state/state_object.go:123.2,123.14 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:115.18,118.21 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:118.21,120.4 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:126.67,129.2 2 2
+github.com/ethereum/go-ethereum/state/state_object.go:132.60,134.39 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:140.2,141.49 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:134.39,138.3 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:141.49,143.31 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:143.31,145.4 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:149.33,150.39 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:161.2,162.12 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:150.39,151.23 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:158.3,158.35 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:151.23,155.12 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:162.12,166.3 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:169.60,170.39 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:174.2,174.62 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:170.39,172.3 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:177.51,181.2 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:182.50,182.74 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:184.51,188.2 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:189.50,189.74 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:191.51,193.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:195.45,195.68 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:202.54,202.56 0 0
+github.com/ethereum/go-ethereum/state/state_object.go:203.61,205.30 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:209.2,211.12 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:205.30,207.3 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:214.56,218.2 2 0
+github.com/ethereum/go-ethereum/state/state_object.go:220.60,221.31 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:225.2,230.12 4 0
+github.com/ethereum/go-ethereum/state/state_object.go:221.31,223.3 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:233.57,240.2 4 0
+github.com/ethereum/go-ethereum/state/state_object.go:242.46,247.23 5 1
+github.com/ethereum/go-ethereum/state/state_object.go:250.2,256.20 6 1
+github.com/ethereum/go-ethereum/state/state_object.go:247.23,249.3 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:259.56,261.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:267.36,269.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:272.40,274.2 1 1
+github.com/ethereum/go-ethereum/state/state_object.go:277.35,279.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:282.48,284.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:286.40,288.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:295.42,297.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:299.48,301.2 1 0
+github.com/ethereum/go-ethereum/state/state_object.go:303.46,315.2 8 0
+github.com/ethereum/go-ethereum/trie/encoding.go:9.44,11.37 2 17
+github.com/ethereum/go-ethereum/trie/encoding.go:15.2,15.21 1 17
+github.com/ethereum/go-ethereum/trie/encoding.go:19.2,21.17 3 17
+github.com/ethereum/go-ethereum/trie/encoding.go:27.2,28.40 2 17
+github.com/ethereum/go-ethereum/trie/encoding.go:32.2,32.22 1 17
+github.com/ethereum/go-ethereum/trie/encoding.go:11.37,13.3 1 9
+github.com/ethereum/go-ethereum/trie/encoding.go:15.21,17.3 1 9
+github.com/ethereum/go-ethereum/trie/encoding.go:21.17,23.3 1 9
+github.com/ethereum/go-ethereum/trie/encoding.go:23.4,25.3 1 8
+github.com/ethereum/go-ethereum/trie/encoding.go:28.40,30.3 1 46
+github.com/ethereum/go-ethereum/trie/encoding.go:35.39,38.18 3 12
+github.com/ethereum/go-ethereum/trie/encoding.go:41.2,41.20 1 12
+github.com/ethereum/go-ethereum/trie/encoding.go:47.2,47.13 1 12
+github.com/ethereum/go-ethereum/trie/encoding.go:38.18,40.3 1 7
+github.com/ethereum/go-ethereum/trie/encoding.go:41.20,43.3 1 6
+github.com/ethereum/go-ethereum/trie/encoding.go:43.4,45.3 1 6
+github.com/ethereum/go-ethereum/trie/encoding.go:50.42,55.24 4 21
+github.com/ethereum/go-ethereum/trie/encoding.go:58.2,60.17 2 21
+github.com/ethereum/go-ethereum/trie/encoding.go:55.24,57.3 1 152
+github.com/ethereum/go-ethereum/trie/encoding.go:63.39,67.24 3 0
+github.com/ethereum/go-ethereum/trie/encoding.go:73.2,75.20 2 0
+github.com/ethereum/go-ethereum/trie/encoding.go:67.24,68.13 1 0
+github.com/ethereum/go-ethereum/trie/encoding.go:68.13,70.4 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:18.44,19.21 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:23.2,23.21 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:32.2,32.19 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:19.21,21.3 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:23.21,25.17 2 0
+github.com/ethereum/go-ethereum/trie/iterator.go:29.3,29.17 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:25.17,27.4 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:43.40,45.2 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:47.70,48.23 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:73.2,73.12 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:49.2,55.11 4 0
+github.com/ethereum/go-ethereum/trie/iterator.go:56.2,57.29 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:61.3,61.33 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:67.2,70.79 2 0
+github.com/ethereum/go-ethereum/trie/iterator.go:57.29,59.4 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:61.33,63.16 2 0
+github.com/ethereum/go-ethereum/trie/iterator.go:63.16,65.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:76.83,77.35 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:129.2,129.12 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:78.2,79.13 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:80.2,81.19 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:90.3,91.19 2 0
+github.com/ethereum/go-ethereum/trie/iterator.go:95.3,95.27 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:102.2,104.22 2 0
+github.com/ethereum/go-ethereum/trie/iterator.go:81.19,85.16 3 0
+github.com/ethereum/go-ethereum/trie/iterator.go:85.16,87.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:91.19,93.4 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:95.27,98.16 3 0
+github.com/ethereum/go-ethereum/trie/iterator.go:98.16,100.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:104.22,105.49 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:105.49,110.5 3 0
+github.com/ethereum/go-ethereum/trie/iterator.go:111.5,115.26 4 0
+github.com/ethereum/go-ethereum/trie/iterator.go:123.4,123.18 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:115.26,117.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:117.6,117.49 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:117.49,119.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:119.6,121.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:123.18,125.5 1 0
+github.com/ethereum/go-ethereum/trie/iterator.go:133.47,143.2 6 0
+github.com/ethereum/go-ethereum/trie/slice.go:9.39,10.22 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:13.2,13.22 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:18.2,18.13 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:10.22,12.3 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:13.22,14.16 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:14.16,16.4 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:22.44,25.17 2 6
+github.com/ethereum/go-ethereum/trie/slice.go:32.2,32.10 1 6
+github.com/ethereum/go-ethereum/trie/slice.go:25.17,26.19 1 11
+github.com/ethereum/go-ethereum/trie/slice.go:29.3,29.6 1 7
+github.com/ethereum/go-ethereum/trie/slice.go:26.19,27.9 1 4
+github.com/ethereum/go-ethereum/trie/slice.go:35.29,37.2 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:39.31,40.16 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:44.2,44.10 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:40.16,42.3 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:47.35,48.21 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:52.2,52.35 1 0
+github.com/ethereum/go-ethereum/trie/slice.go:48.21,50.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:12.44,15.59 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:19.2,19.59 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:15.59,17.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:22.27,24.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:41.64,43.2 1 16
+github.com/ethereum/go-ethereum/trie/trie.go:45.29,47.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:55.43,57.2 1 1
+github.com/ethereum/go-ethereum/trie/trie.go:59.69,63.29 3 26
+github.com/ethereum/go-ethereum/trie/trie.go:72.2,72.10 1 10
+github.com/ethereum/go-ethereum/trie/trie.go:63.29,70.3 4 16
+github.com/ethereum/go-ethereum/trie/trie.go:75.52,77.2 1 25
+github.com/ethereum/go-ethereum/trie/trie.go:79.52,81.37 1 13
+github.com/ethereum/go-ethereum/trie/trie.go:86.2,90.15 3 0
+github.com/ethereum/go-ethereum/trie/trie.go:97.2,99.14 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:81.37,83.3 1 13
+github.com/ethereum/go-ethereum/trie/trie.go:90.15,91.31 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:91.31,94.4 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:102.40,106.2 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:108.30,110.20 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:114.2,114.37 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:120.2,124.28 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:110.20,112.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:114.37,115.17 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:115.17,118.4 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:124.28,126.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:129.28,130.37 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:135.2,135.23 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:130.37,131.17 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:131.17,133.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:152.45,154.32 2 2
+github.com/ethereum/go-ethereum/trie/trie.go:160.2,160.21 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:154.32,156.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:156.4,158.3 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:163.55,172.2 5 1
+github.com/ethereum/go-ethereum/trie/trie.go:174.45,175.26 1 9
+github.com/ethereum/go-ethereum/trie/trie.go:176.2,182.24 1 1
+github.com/ethereum/go-ethereum/trie/trie.go:183.2,184.19 1 7
+github.com/ethereum/go-ethereum/trie/trie.go:185.2,186.46 1 1
+github.com/ethereum/go-ethereum/trie/trie.go:194.42,201.17 5 8
+github.com/ethereum/go-ethereum/trie/trie.go:206.2,206.17 1 8
+github.com/ethereum/go-ethereum/trie/trie.go:201.17,203.3 1 6
+github.com/ethereum/go-ethereum/trie/trie.go:203.4,205.3 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:209.39,217.2 5 0
+github.com/ethereum/go-ethereum/trie/trie.go:219.35,227.2 5 0
+github.com/ethereum/go-ethereum/trie/trie.go:229.36,230.31 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:231.2,232.14 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:235.3,235.19 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:236.2,237.18 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:241.3,241.11 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:242.2,243.72 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:232.14,234.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:237.18,239.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:248.37,250.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:253.29,255.39 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:259.2,259.13 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:255.39,257.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:263.23,266.2 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:268.23,271.2 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:273.31,275.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:277.67,280.48 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:284.2,287.17 3 0
+github.com/ethereum/go-ethereum/trie/trie.go:304.2,304.28 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:280.48,282.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:287.17,289.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:289.4,289.24 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:289.24,294.57 3 0
+github.com/ethereum/go-ethereum/trie/trie.go:294.57,296.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:296.5,298.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:299.4,299.25 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:299.25,301.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:307.57,310.23 2 18
+github.com/ethereum/go-ethereum/trie/trie.go:314.2,315.19 2 13
+github.com/ethereum/go-ethereum/trie/trie.go:321.2,323.13 2 13
+github.com/ethereum/go-ethereum/trie/trie.go:310.23,312.3 1 5
+github.com/ethereum/go-ethereum/trie/trie.go:315.19,317.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:317.4,317.26 1 13
+github.com/ethereum/go-ethereum/trie/trie.go:317.26,319.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:326.84,328.2 1 6
+github.com/ethereum/go-ethereum/trie/trie.go:330.50,333.2 1 25
+github.com/ethereum/go-ethereum/trie/trie.go:335.44,337.25 2 13
+github.com/ethereum/go-ethereum/trie/trie.go:340.2,340.14 1 13
+github.com/ethereum/go-ethereum/trie/trie.go:337.25,339.3 1 221
+github.com/ethereum/go-ethereum/trie/trie.go:343.89,344.19 1 22
+github.com/ethereum/go-ethereum/trie/trie.go:349.2,350.33 2 19
+github.com/ethereum/go-ethereum/trie/trie.go:356.2,358.28 2 12
+github.com/ethereum/go-ethereum/trie/trie.go:412.2,412.25 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:344.19,346.3 1 3
+github.com/ethereum/go-ethereum/trie/trie.go:350.33,354.3 2 7
+github.com/ethereum/go-ethereum/trie/trie.go:358.28,365.26 3 6
+github.com/ethereum/go-ethereum/trie/trie.go:370.3,372.31 3 6
+github.com/ethereum/go-ethereum/trie/trie.go:388.3,388.26 1 6
+github.com/ethereum/go-ethereum/trie/trie.go:365.26,368.4 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:372.31,375.4 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:375.5,386.4 6 4
+github.com/ethereum/go-ethereum/trie/trie.go:388.26,391.4 1 1
+github.com/ethereum/go-ethereum/trie/trie.go:391.5,394.4 2 5
+github.com/ethereum/go-ethereum/trie/trie.go:395.4,400.27 2 6
+github.com/ethereum/go-ethereum/trie/trie.go:407.3,409.24 2 6
+github.com/ethereum/go-ethereum/trie/trie.go:400.27,402.18 2 102
+github.com/ethereum/go-ethereum/trie/trie.go:402.18,404.5 1 102
+github.com/ethereum/go-ethereum/trie/trie.go:415.70,416.19 1 5
+github.com/ethereum/go-ethereum/trie/trie.go:421.2,423.33 2 5
+github.com/ethereum/go-ethereum/trie/trie.go:430.2,432.28 2 5
+github.com/ethereum/go-ethereum/trie/trie.go:502.2,502.28 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:416.19,418.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:423.33,428.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:432.28,438.26 3 2
+github.com/ethereum/go-ethereum/trie/trie.go:438.26,442.4 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:442.5,442.42 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:442.42,447.24 4 0
+github.com/ethereum/go-ethereum/trie/trie.go:456.4,456.25 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:447.24,450.5 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:450.6,452.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:457.5,459.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:460.4,465.27 3 3
+github.com/ethereum/go-ethereum/trie/trie.go:472.3,474.27 3 3
+github.com/ethereum/go-ethereum/trie/trie.go:483.3,483.19 1 3
+github.com/ethereum/go-ethereum/trie/trie.go:499.3,499.24 1 3
+github.com/ethereum/go-ethereum/trie/trie.go:465.27,467.18 2 51
+github.com/ethereum/go-ethereum/trie/trie.go:467.18,469.5 1 51
+github.com/ethereum/go-ethereum/trie/trie.go:474.27,475.18 1 51
+github.com/ethereum/go-ethereum/trie/trie.go:475.18,476.21 1 5
+github.com/ethereum/go-ethereum/trie/trie.go:476.21,478.6 1 3
+github.com/ethereum/go-ethereum/trie/trie.go:478.7,480.6 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:483.19,485.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:485.5,485.25 1 3
+github.com/ethereum/go-ethereum/trie/trie.go:485.25,487.25 2 1
+github.com/ethereum/go-ethereum/trie/trie.go:487.25,489.5 1 1
+github.com/ethereum/go-ethereum/trie/trie.go:489.6,489.31 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:489.31,492.5 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:494.5,496.4 1 2
+github.com/ethereum/go-ethereum/trie/trie.go:516.44,518.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:520.40,522.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:526.62,527.28 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:527.28,530.37 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:530.37,532.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:532.5,533.25 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:533.25,535.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:535.6,538.5 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:540.4,541.42 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:541.42,542.48 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:542.48,544.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:544.6,545.39 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:545.39,547.6 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:547.7,549.19 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:549.19,552.7 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:559.46,562.2 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:564.44,565.24 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:569.2,571.16 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:565.24,567.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:574.37,576.27 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:579.2,579.23 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:576.27,578.3 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:582.38,584.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:586.40,588.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:592.47,594.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:596.77,598.2 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:600.94,601.28 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:601.28,605.70 3 0
+github.com/ethereum/go-ethereum/trie/trie.go:605.70,607.4 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:607.5,608.25 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:608.25,610.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:610.6,612.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:614.4,615.42 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:615.42,617.48 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:617.48,619.5 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:619.6,620.72 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:620.72,622.6 1 0
+github.com/ethereum/go-ethereum/trie/trie.go:622.7,624.19 2 0
+github.com/ethereum/go-ethereum/trie/trie.go:624.19,626.7 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:25.24,27.2 1 4
+github.com/ethereum/go-ethereum/vm/stack.go:29.36,31.2 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:33.28,35.2 1 141
+github.com/ethereum/go-ethereum/vm/stack.go:37.33,44.2 4 42
+github.com/ethereum/go-ethereum/vm/stack.go:46.46,53.2 4 20
+github.com/ethereum/go-ethereum/vm/stack.go:55.34,59.2 2 16
+github.com/ethereum/go-ethereum/vm/stack.go:61.47,65.2 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:67.52,71.2 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:73.39,77.2 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:79.35,81.2 1 84
+github.com/ethereum/go-ethereum/vm/stack.go:83.50,86.29 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:91.2,91.12 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:86.29,89.3 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:94.26,96.22 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:103.2,103.30 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:96.22,97.31 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:97.31,99.4 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:100.4,102.3 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:110.26,112.2 1 3
+github.com/ethereum/go-ethereum/vm/stack.go:114.56,115.20 1 2
+github.com/ethereum/go-ethereum/vm/stack.go:115.20,118.24 3 2
+github.com/ethereum/go-ethereum/vm/stack.go:128.3,128.43 1 2
+github.com/ethereum/go-ethereum/vm/stack.go:118.24,121.16 2 2
+github.com/ethereum/go-ethereum/vm/stack.go:121.16,126.5 2 2
+github.com/ethereum/go-ethereum/vm/stack.go:132.38,133.28 1 28
+github.com/ethereum/go-ethereum/vm/stack.go:133.28,135.3 1 8
+github.com/ethereum/go-ethereum/vm/stack.go:138.49,139.32 1 4
+github.com/ethereum/go-ethereum/vm/stack.go:145.2,145.12 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:139.32,143.3 2 4
+github.com/ethereum/go-ethereum/vm/stack.go:148.59,149.35 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:157.2,157.8 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:149.35,155.3 4 0
+github.com/ethereum/go-ethereum/vm/stack.go:160.28,162.2 1 139
+github.com/ethereum/go-ethereum/vm/stack.go:164.32,166.2 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:168.26,170.22 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:179.2,179.37 1 0
+github.com/ethereum/go-ethereum/vm/stack.go:170.22,172.45 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:172.45,175.4 2 0
+github.com/ethereum/go-ethereum/vm/stack.go:176.4,178.3 1 0
+github.com/ethereum/go-ethereum/vm/address.go:19.55,21.2 1 2
+github.com/ethereum/go-ethereum/vm/address.go:29.35,31.2 1 1
+github.com/ethereum/go-ethereum/vm/address.go:33.38,35.2 1 1
+github.com/ethereum/go-ethereum/vm/address.go:37.38,39.15 1 0
+github.com/ethereum/go-ethereum/vm/address.go:41.2,41.29 1 0
+github.com/ethereum/go-ethereum/vm/address.go:39.15,39.28 1 0
+github.com/ethereum/go-ethereum/vm/execution.go:19.103,21.2 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:23.38,25.2 1 0
+github.com/ethereum/go-ethereum/vm/execution.go:27.81,32.2 2 2
+github.com/ethereum/go-ethereum/vm/execution.go:34.92,39.15 4 2
+github.com/ethereum/go-ethereum/vm/execution.go:46.2,56.24 3 2
+github.com/ethereum/go-ethereum/vm/execution.go:60.2,60.16 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:90.2,90.8 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:39.15,40.39 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:43.3,43.57 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:40.39,42.4 1 0
+github.com/ethereum/go-ethereum/vm/execution.go:56.24,58.3 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:60.16,64.3 2 0
+github.com/ethereum/go-ethereum/vm/execution.go:64.4,68.40 3 2
+github.com/ethereum/go-ethereum/vm/execution.go:68.40,69.32 1 2
+github.com/ethereum/go-ethereum/vm/execution.go:69.32,72.5 2 2
+github.com/ethereum/go-ethereum/vm/execution.go:73.5,78.39 3 0
+github.com/ethereum/go-ethereum/vm/execution.go:85.4,86.20 2 0
+github.com/ethereum/go-ethereum/vm/execution.go:78.39,82.5 2 0
+github.com/ethereum/go-ethereum/vm/execution.go:93.74,95.2 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:20.52,21.13 1 4
+github.com/ethereum/go-ethereum/vm/vm.go:22.2,23.25 1 3
+github.com/ethereum/go-ethereum/vm/vm.go:24.2,25.23 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:29.70,33.15 2 1
+github.com/ethereum/go-ethereum/vm/vm.go:41.2,41.28 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:45.2,52.25 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:59.2,59.6 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:33.15,34.31 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:34.31,37.4 2 1
+github.com/ethereum/go-ethereum/vm/vm.go:41.28,43.3 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:52.25,53.23 1 15
+github.com/ethereum/go-ethereum/vm/vm.go:53.23,55.5 1 1
+github.com/ethereum/go-ethereum/vm/vm.go:59.6,68.44 5 22
+github.com/ethereum/go-ethereum/vm/vm.go:72.3,75.13 3 22
+github.com/ethereum/go-ethereum/vm/vm.go:144.3,144.39 1 22
+github.com/ethereum/go-ethereum/vm/vm.go:158.3,158.27 1 22
+github.com/ethereum/go-ethereum/vm/vm.go:166.3,168.13 2 22
+github.com/ethereum/go-ethereum/vm/vm.go:707.3,707.7 1 21
+github.com/ethereum/go-ethereum/vm/vm.go:68.44,70.4 1 24
+github.com/ethereum/go-ethereum/vm/vm.go:76.3,77.25 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:78.3,79.25 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:80.3,81.21 1 3
+github.com/ethereum/go-ethereum/vm/vm.go:82.3,86.65 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:93.4,93.43 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:94.3,95.23 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:96.3,98.52 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:99.3,102.52 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:103.3,105.51 2 4
+github.com/ethereum/go-ethereum/vm/vm.go:106.3,109.69 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:110.3,115.69 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:116.3,119.69 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:120.3,123.69 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:124.3,127.82 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:128.3,136.37 6 0
+github.com/ethereum/go-ethereum/vm/vm.go:137.3,141.82 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:86.65,88.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:88.6,88.73 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:88.73,90.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:90.6,92.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:144.39,149.50 4 4
+github.com/ethereum/go-ethereum/vm/vm.go:149.50,155.5 4 2
+github.com/ethereum/go-ethereum/vm/vm.go:158.27,164.4 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:170.3,179.20 5 3
+github.com/ethereum/go-ethereum/vm/vm.go:180.3,189.20 5 0
+github.com/ethereum/go-ethereum/vm/vm.go:190.3,199.20 5 0
+github.com/ethereum/go-ethereum/vm/vm.go:200.3,204.32 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:208.4,211.20 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:212.3,216.32 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:231.4,231.20 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:232.3,240.20 5 0
+github.com/ethereum/go-ethereum/vm/vm.go:241.3,245.32 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:260.4,260.20 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:262.3,270.20 5 1
+github.com/ethereum/go-ethereum/vm/vm.go:271.3,277.20 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:278.3,282.20 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:287.3,292.20 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:298.3,302.26 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:307.3,312.20 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:318.3,323.21 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:328.3,331.35 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:338.3,342.30 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:343.3,347.29 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:348.3,352.30 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:353.3,356.85 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:363.3,375.20 8 0
+github.com/ethereum/go-ethereum/vm/vm.go:376.3,388.20 8 0
+github.com/ethereum/go-ethereum/vm/vm.go:391.3,396.34 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:399.3,400.47 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:402.3,408.23 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:410.3,413.36 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:415.3,417.36 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:419.3,422.21 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:424.3,432.32 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:439.4,439.34 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:440.3,442.29 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:444.3,452.19 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:459.4,461.26 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:462.3,464.25 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:472.4,473.17 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:475.3,477.25 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:485.4,492.19 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:499.4,501.30 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:502.3,503.29 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:506.3,509.38 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:511.3,514.38 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:516.3,519.32 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:521.3,524.22 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:526.3,529.26 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:531.3,533.29 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:536.3,544.36 5 11
+github.com/ethereum/go-ethereum/vm/vm.go:545.3,547.15 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:548.3,550.17 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:551.3,553.18 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:555.3,559.19 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:561.3,565.61 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:567.3,572.53 4 4
+github.com/ethereum/go-ethereum/vm/vm.go:574.3,579.28 4 3
+github.com/ethereum/go-ethereum/vm/vm.go:581.3,586.49 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:588.3,593.12 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:594.3,597.38 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:606.3,606.17 0 0
+github.com/ethereum/go-ethereum/vm/vm.go:607.3,608.31 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:609.3,610.44 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:611.3,612.27 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:614.3,637.18 8 0
+github.com/ethereum/go-ethereum/vm/vm.go:649.3,664.22 8 0
+github.com/ethereum/go-ethereum/vm/vm.go:670.4,672.18 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:680.3,685.35 4 0
+github.com/ethereum/go-ethereum/vm/vm.go:686.3,695.15 5 0
+github.com/ethereum/go-ethereum/vm/vm.go:696.3,698.35 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:699.3,704.67 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:204.32,206.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:216.32,218.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:218.6,220.53 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:226.5,228.15 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:220.53,222.6 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:222.7,224.6 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:245.32,247.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:247.6,249.32 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:255.5,257.15 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:249.32,251.6 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:251.7,253.6 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:282.20,284.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:284.6,286.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:292.20,294.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:294.6,296.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:302.26,304.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:304.6,306.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:312.20,314.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:314.6,316.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:323.21,325.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:325.6,327.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:331.35,333.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:333.6,335.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:356.85,360.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:360.6,362.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:432.32,437.5 3 0
+github.com/ethereum/go-ethereum/vm/vm.go:452.19,455.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:455.6,455.28 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:455.28,457.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:464.25,468.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:468.6,470.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:477.25,481.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:481.6,483.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:492.19,495.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:495.6,495.28 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:495.28,497.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:597.38,600.43 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:604.5,604.13 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:600.43,602.6 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:637.18,643.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:643.6,647.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:664.22,666.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:666.6,668.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:672.18,674.5 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:674.6,678.5 2 0
+github.com/ethereum/go-ethereum/vm/vm.go:711.35,713.2 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:715.29,717.2 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:719.72,719.87 1 0
+github.com/ethereum/go-ethereum/vm/vm.go:720.72,720.87 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:32.43,34.25 2 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:38.2,38.57 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:34.25,36.3 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:41.75,44.22 2 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:60.2,70.30 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:100.2,100.21 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:105.2,105.28 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:109.2,111.6 2 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:44.22,46.16 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:46.16,47.32 1 3
+github.com/ethereum/go-ethereum/vm/vm_debug.go:47.32,56.5 4 1
+github.com/ethereum/go-ethereum/vm/vm_debug.go:70.30,71.23 1 33
+github.com/ethereum/go-ethereum/vm/vm_debug.go:71.23,73.5 1 1
+github.com/ethereum/go-ethereum/vm/vm_debug.go:76.34,81.14 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:95.4,95.15 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:81.14,83.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:83.6,85.64 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:91.5,91.12 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:85.64,87.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:87.7,87.43 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:87.43,89.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:100.21,102.3 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:105.28,107.3 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:111.6,122.30 5 80
+github.com/ethereum/go-ethereum/vm/vm_debug.go:139.3,140.44 2 80
+github.com/ethereum/go-ethereum/vm/vm_debug.go:146.3,150.13 3 80
+github.com/ethereum/go-ethereum/vm/vm_debug.go:253.3,253.39 1 79
+github.com/ethereum/go-ethereum/vm/vm_debug.go:270.3,273.27 3 79
+github.com/ethereum/go-ethereum/vm/vm_debug.go:283.3,283.13 1 79
+github.com/ethereum/go-ethereum/vm/vm_debug.go:917.3,921.22 3 77
+github.com/ethereum/go-ethereum/vm/vm_debug.go:122.30,123.14 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:131.4,132.19 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:136.4,136.92 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:124.4,125.98 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:125.98,128.6 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:132.19,134.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:140.44,141.37 1 88
+github.com/ethereum/go-ethereum/vm/vm_debug.go:141.37,143.5 1 88
+github.com/ethereum/go-ethereum/vm/vm_debug.go:152.3,153.14 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:154.3,155.14 1 10
+github.com/ethereum/go-ethereum/vm/vm_debug.go:156.3,157.14 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:158.3,160.14 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:161.3,163.14 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:164.3,171.52 6 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:173.3,174.25 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:175.3,178.25 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:179.3,182.21 2 9
+github.com/ethereum/go-ethereum/vm/vm_debug.go:184.3,190.65 5 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:201.4,201.46 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:202.3,204.23 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:205.3,207.52 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:208.3,211.52 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:212.3,214.51 2 10
+github.com/ethereum/go-ethereum/vm/vm_debug.go:215.3,218.69 2 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:219.3,224.69 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:225.3,228.69 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:229.3,232.69 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:233.3,236.82 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:237.3,245.37 6 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:246.3,250.82 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:190.65,193.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:193.6,193.73 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:193.73,197.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:197.6,200.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:253.39,258.50 4 12
+github.com/ethereum/go-ethereum/vm/vm_debug.go:258.50,266.5 5 6
+github.com/ethereum/go-ethereum/vm/vm_debug.go:273.27,281.4 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:285.3,295.20 6 9
+github.com/ethereum/go-ethereum/vm/vm_debug.go:296.3,306.20 6 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:307.3,317.20 6 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:318.3,322.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:326.4,330.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:331.3,336.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:351.4,352.20 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:353.3,358.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:364.4,367.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:368.3,373.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:388.4,389.20 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:391.3,402.20 6 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:403.3,405.17 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:422.3,428.20 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:429.3,433.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:438.3,443.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:449.3,453.26 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:458.3,463.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:469.3,474.21 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:479.3,481.35 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:488.3,492.30 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:493.3,497.29 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:498.3,502.30 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:503.3,506.34 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:514.4,516.20 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:517.3,530.20 8 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:531.3,544.20 8 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:547.3,553.31 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:555.3,558.44 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:559.3,566.45 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:567.3,572.33 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:573.3,577.33 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:578.3,583.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:584.3,591.32 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:598.4,600.34 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:601.3,605.28 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:606.3,614.19 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:621.4,625.72 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:626.3,628.25 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:636.4,639.28 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:640.3,642.25 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:650.4,657.19 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:664.4,668.72 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:669.3,672.40 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:675.3,680.37 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:681.3,686.37 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:687.3,692.33 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:693.3,698.43 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:699.3,704.47 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:705.3,706.35 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:709.3,720.41 8 47
+github.com/ethereum/go-ethereum/vm/vm_debug.go:721.3,722.15 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:723.3,729.151 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:732.3,736.62 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:737.3,742.27 5 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:746.4,749.30 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:750.3,755.40 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:756.3,761.32 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:762.3,768.42 4 10
+github.com/ethereum/go-ethereum/vm/vm_debug.go:769.3,774.59 4 9
+github.com/ethereum/go-ethereum/vm/vm_debug.go:775.3,780.30 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:784.4,784.59 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:785.3,789.12 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:790.3,793.38 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:799.3,799.17 0 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:800.3,801.18 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:802.3,803.44 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:804.3,805.27 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:807.3,831.18 9 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:844.4,847.23 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:850.3,865.22 8 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:871.4,873.18 3 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:882.4,885.23 2 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:889.3,895.35 4 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:896.3,903.15 4 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:904.3,907.35 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:908.3,914.67 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:322.32,324.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:336.32,338.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:338.6,340.53 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:346.5,348.15 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:340.53,342.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:342.7,344.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:358.32,360.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:360.6,362.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:373.32,375.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:375.6,377.32 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:383.5,385.15 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:377.32,379.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:379.7,381.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:405.17,410.39 5 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:416.5,420.20 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:410.39,412.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:412.7,414.6 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:433.20,435.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:435.6,437.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:443.20,445.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:445.6,447.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:453.26,455.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:455.6,457.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:463.20,465.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:465.6,467.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:474.21,476.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:476.6,478.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:481.35,483.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:483.6,485.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:506.34,510.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:510.6,512.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:591.32,596.5 3 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:614.19,617.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:617.6,617.28 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:617.28,619.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:628.25,632.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:632.6,634.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:642.25,646.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:646.6,648.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:657.19,660.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:660.6,660.28 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:660.28,662.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:729.151,731.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:742.27,744.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:780.30,782.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:793.38,796.13 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:831.18,838.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:838.6,842.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:847.23,849.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:865.22,867.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:867.6,869.5 1 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:873.18,877.5 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:877.6,881.5 2 2
+github.com/ethereum/go-ethereum/vm/vm_debug.go:885.23,887.5 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:921.22,922.51 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:922.51,923.41 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:923.41,926.98 2 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:926.98,928.7 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:929.7,929.29 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:929.29,930.97 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:930.97,932.7 1 0
+github.com/ethereum/go-ethereum/vm/vm_debug.go:940.77,941.31 1 248
+github.com/ethereum/go-ethereum/vm/vm_debug.go:945.2,945.13 1 248
+github.com/ethereum/go-ethereum/vm/vm_debug.go:941.31,943.3 1 248
+github.com/ethereum/go-ethereum/vm/vm_debug.go:948.44,949.31 1 82
+github.com/ethereum/go-ethereum/vm/vm_debug.go:954.2,954.13 1 82
+github.com/ethereum/go-ethereum/vm/vm_debug.go:949.31,952.3 2 82
+github.com/ethereum/go-ethereum/vm/vm_debug.go:957.40,959.2 1 4
+github.com/ethereum/go-ethereum/vm/vm_debug.go:961.34,963.2 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:34.126,46.2 5 4
+github.com/ethereum/go-ethereum/vm/closure.go:49.57,51.14 2 3
+github.com/ethereum/go-ethereum/vm/closure.go:55.2,55.10 1 3
+github.com/ethereum/go-ethereum/vm/closure.go:51.14,53.3 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:58.50,60.2 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:62.39,64.2 1 102
+github.com/ethereum/go-ethereum/vm/closure.go:66.39,67.21 1 102
+github.com/ethereum/go-ethereum/vm/closure.go:71.2,71.10 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:67.21,69.3 1 102
+github.com/ethereum/go-ethereum/vm/closure.go:74.45,75.42 1 11
+github.com/ethereum/go-ethereum/vm/closure.go:79.2,79.24 1 11
+github.com/ethereum/go-ethereum/vm/closure.go:75.42,77.3 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:82.54,83.72 1 47
+github.com/ethereum/go-ethereum/vm/closure.go:87.2,89.34 2 47
+github.com/ethereum/go-ethereum/vm/closure.go:83.72,85.3 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:92.62,94.2 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:96.36,98.2 1 16
+github.com/ethereum/go-ethereum/vm/closure.go:100.82,106.2 3 4
+github.com/ethereum/go-ethereum/vm/closure.go:108.45,113.2 2 4
+github.com/ethereum/go-ethereum/vm/closure.go:115.45,116.24 1 102
+github.com/ethereum/go-ethereum/vm/closure.go:121.2,124.13 3 102
+github.com/ethereum/go-ethereum/vm/closure.go:116.24,118.3 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:128.50,132.2 2 0
+github.com/ethereum/go-ethereum/vm/closure.go:134.47,136.2 1 2
+github.com/ethereum/go-ethereum/vm/closure.go:138.39,140.2 1 0
+github.com/ethereum/go-ethereum/vm/closure.go:142.51,144.2 1 0
+github.com/ethereum/go-ethereum/vm/common.go:46.44,47.30 1 20
+github.com/ethereum/go-ethereum/vm/common.go:51.2,51.33 1 18
+github.com/ethereum/go-ethereum/vm/common.go:47.30,49.3 1 2
+github.com/ethereum/go-ethereum/vm/common.go:55.29,57.2 1 94
+github.com/ethereum/go-ethereum/vm/common.go:60.40,63.59 2 0
+github.com/ethereum/go-ethereum/vm/common.go:67.2,67.12 1 0
+github.com/ethereum/go-ethereum/vm/common.go:63.59,65.3 1 0
+github.com/ethereum/go-ethereum/vm/types.go:328.33,330.19 2 81
+github.com/ethereum/go-ethereum/vm/types.go:334.2,334.12 1 81
+github.com/ethereum/go-ethereum/vm/types.go:330.19,332.3 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:10.48,12.6 2 0
+github.com/ethereum/go-ethereum/vm/asm.go:44.2,44.8 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:12.6,13.50 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:18.3,24.13 4 0
+github.com/ethereum/go-ethereum/vm/asm.go:41.3,41.27 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:13.50,15.4 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:25.3,28.39 3 0
+github.com/ethereum/go-ethereum/vm/asm.go:32.4,33.22 2 0
+github.com/ethereum/go-ethereum/vm/asm.go:36.4,38.31 2 0
+github.com/ethereum/go-ethereum/vm/asm.go:28.39,30.5 1 0
+github.com/ethereum/go-ethereum/vm/asm.go:33.22,35.5 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:12.43,14.2 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:16.42,18.2 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:20.31,23.2 2 2
+github.com/ethereum/go-ethereum/vm/errors.go:29.40,31.2 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:33.39,35.2 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:37.30,40.2 2 0
+github.com/ethereum/go-ethereum/vm/errors.go:44.39,46.2 1 0
+github.com/ethereum/go-ethereum/vm/errors.go:48.33,51.2 2 2
+github.com/ethereum/go-ethereum/vm/analysis.go:9.63,14.50 4 3
+github.com/ethereum/go-ethereum/vm/analysis.go:34.2,34.8 1 3
+github.com/ethereum/go-ethereum/vm/analysis.go:14.50,16.13 2 117
+github.com/ethereum/go-ethereum/vm/analysis.go:17.3,19.33 2 61
+github.com/ethereum/go-ethereum/vm/analysis.go:23.4,24.13 2 61
+github.com/ethereum/go-ethereum/vm/analysis.go:25.3,26.10 1 0
+github.com/ethereum/go-ethereum/vm/analysis.go:30.3,31.14 1 56
+github.com/ethereum/go-ethereum/vm/analysis.go:19.33,21.5 1 61
+github.com/ethereum/go-ethereum/vm/analysis.go:26.10,28.5 1 0
+github.com/ethereum/go-ethereum/vm/environment.go:38.56,39.36 1 0
+github.com/ethereum/go-ethereum/vm/environment.go:43.2,50.12 3 0
+github.com/ethereum/go-ethereum/vm/environment.go:39.36,41.3 1 0
+github.com/ethereum/go-ethereum/wire/client_identity.go:21.118,31.2 2 1
+github.com/ethereum/go-ethereum/wire/client_identity.go:33.39,34.2 0 0
+github.com/ethereum/go-ethereum/wire/client_identity.go:36.48,38.33 2 2
+github.com/ethereum/go-ethereum/wire/client_identity.go:42.2,47.20 1 2
+github.com/ethereum/go-ethereum/wire/client_identity.go:38.33,40.3 1 2
+github.com/ethereum/go-ethereum/wire/client_identity.go:50.77,52.2 1 1
+github.com/ethereum/go-ethereum/wire/client_identity.go:54.61,56.2 1 2
+github.com/ethereum/go-ethereum/wire/messages2.go:23.37,25.2 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:28.37,29.36 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:33.2,36.12 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:29.36,31.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:43.68,47.26 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:58.2,67.16 6 0
+github.com/ethereum/go-ethereum/wire/messages2.go:71.2,71.12 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:47.26,48.59 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:48.59,50.4 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:50.5,50.50 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:50.50,52.4 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:52.5,54.4 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:67.16,69.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:74.101,75.20 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:79.2,79.20 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:84.2,84.46 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:88.2,90.40 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:94.2,106.8 6 0
+github.com/ethereum/go-ethereum/wire/messages2.go:75.20,77.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:79.20,81.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:84.46,86.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:90.40,92.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:112.52,114.15 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:122.2,124.6 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:149.2,151.78 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:159.2,159.8 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:114.15,115.31 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:115.31,117.4 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:124.6,131.27 4 0
+github.com/ethereum/go-ethereum/wire/messages2.go:144.3,145.18 2 0
+github.com/ethereum/go-ethereum/wire/messages2.go:131.27,132.28 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:132.28,135.5 2 0
+github.com/ethereum/go-ethereum/wire/messages2.go:135.6,136.10 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:140.5,140.20 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:140.20,141.9 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:151.78,154.17 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:154.17,156.4 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:162.82,163.20 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:167.2,167.20 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:172.2,172.46 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:176.2,178.40 3 0
+github.com/ethereum/go-ethereum/wire/messages2.go:182.2,194.8 6 0
+github.com/ethereum/go-ethereum/wire/messages2.go:163.20,165.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:167.20,169.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:172.46,174.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:178.40,180.3 1 0
+github.com/ethereum/go-ethereum/wire/messages2.go:197.50,199.2 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:62.35,64.2 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:72.57,77.2 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:84.59,86.15 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:92.2,98.6 2 0
+github.com/ethereum/go-ethereum/wire/messaging.go:145.2,145.29 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:155.2,155.8 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:86.15,87.31 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:87.31,89.4 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:98.6,104.27 4 0
+github.com/ethereum/go-ethereum/wire/messaging.go:113.3,113.31 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:120.3,121.21 2 0
+github.com/ethereum/go-ethereum/wire/messaging.go:134.3,134.29 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:104.27,105.28 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:105.28,108.5 2 0
+github.com/ethereum/go-ethereum/wire/messaging.go:108.6,109.10 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:113.31,117.12 2 0
+github.com/ethereum/go-ethereum/wire/messaging.go:121.21,123.48 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:128.4,131.19 2 0
+github.com/ethereum/go-ethereum/wire/messaging.go:123.48,125.5 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:134.29,139.22 4 0
+github.com/ethereum/go-ethereum/wire/messaging.go:139.22,140.10 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:145.29,153.3 4 0
+github.com/ethereum/go-ethereum/wire/messaging.go:160.50,174.16 7 0
+github.com/ethereum/go-ethereum/wire/messaging.go:178.2,178.12 1 0
+github.com/ethereum/go-ethereum/wire/messaging.go:174.16,176.3 1 0
diff --git a/ptrie/cache.go b/ptrie/cache.go
new file mode 100644
index 0000000000000000000000000000000000000000..721dc4cf64d947fd706910062102b56b53c4ebfa
--- /dev/null
+++ b/ptrie/cache.go
@@ -0,0 +1,42 @@
+package ptrie
+
+type Backend interface {
+	Get([]byte) ([]byte, error)
+	Put([]byte, []byte)
+}
+
+type Cache struct {
+	store   map[string][]byte
+	backend Backend
+}
+
+func NewCache(backend Backend) *Cache {
+	return &Cache{make(map[string][]byte), backend}
+}
+
+func (self *Cache) Get(key []byte) []byte {
+	data := self.store[string(key)]
+	if data == nil {
+		data, _ = self.backend.Get(key)
+	}
+
+	return data
+}
+
+func (self *Cache) Put(key []byte, data []byte) {
+	self.store[string(key)] = data
+}
+
+func (self *Cache) Flush() {
+	for k, v := range self.store {
+		self.backend.Put([]byte(k), v)
+	}
+
+	// This will eventually grow too large. We'd could
+	// do a make limit on storage and push out not-so-popular nodes.
+	//self.Reset()
+}
+
+func (self *Cache) Reset() {
+	self.store = make(map[string][]byte)
+}
diff --git a/ptrie/fullnode.go b/ptrie/fullnode.go
new file mode 100644
index 0000000000000000000000000000000000000000..7a7f7d22d4f88bf2f3859a2e162b9348afc14148
--- /dev/null
+++ b/ptrie/fullnode.go
@@ -0,0 +1,69 @@
+package ptrie
+
+type FullNode struct {
+	trie  *Trie
+	nodes [17]Node
+}
+
+func NewFullNode(t *Trie) *FullNode {
+	return &FullNode{trie: t}
+}
+
+func (self *FullNode) Dirty() bool { return true }
+func (self *FullNode) Value() Node {
+	self.nodes[16] = self.trie.trans(self.nodes[16])
+	return self.nodes[16]
+}
+func (self *FullNode) Branches() []Node {
+	return self.nodes[:16]
+}
+
+func (self *FullNode) Copy() Node {
+	nnode := NewFullNode(self.trie)
+	for i, node := range self.nodes {
+		nnode.nodes[i] = node
+	}
+
+	return nnode
+}
+
+// Returns the length of non-nil nodes
+func (self *FullNode) Len() (amount int) {
+	for _, node := range self.nodes {
+		if node != nil {
+			amount++
+		}
+	}
+
+	return
+}
+
+func (self *FullNode) Hash() interface{} {
+	return self.trie.store(self)
+}
+
+func (self *FullNode) RlpData() interface{} {
+	t := make([]interface{}, 17)
+	for i, node := range self.nodes {
+		if node != nil {
+			t[i] = node.Hash()
+		} else {
+			t[i] = ""
+		}
+	}
+
+	return t
+}
+
+func (self *FullNode) set(k byte, value Node) {
+	self.nodes[int(k)] = value
+}
+
+func (self *FullNode) branch(i byte) Node {
+	if self.nodes[int(i)] != nil {
+		self.nodes[int(i)] = self.trie.trans(self.nodes[int(i)])
+
+		return self.nodes[int(i)]
+	}
+	return nil
+}
diff --git a/ptrie/hashnode.go b/ptrie/hashnode.go
new file mode 100644
index 0000000000000000000000000000000000000000..4c17569d783629bc21c1eec897a64091a4537af3
--- /dev/null
+++ b/ptrie/hashnode.go
@@ -0,0 +1,22 @@
+package ptrie
+
+type HashNode struct {
+	key []byte
+}
+
+func NewHash(key []byte) *HashNode {
+	return &HashNode{key}
+}
+
+func (self *HashNode) RlpData() interface{} {
+	return self.key
+}
+
+func (self *HashNode) Hash() interface{} {
+	return self.key
+}
+
+// These methods will never be called but we have to satisfy Node interface
+func (self *HashNode) Value() Node { return nil }
+func (self *HashNode) Dirty() bool { return true }
+func (self *HashNode) Copy() Node  { return self }
diff --git a/ptrie/iterator.go b/ptrie/iterator.go
new file mode 100644
index 0000000000000000000000000000000000000000..5714bdbc8a511b847e47003867feaef87efc517f
--- /dev/null
+++ b/ptrie/iterator.go
@@ -0,0 +1,115 @@
+package ptrie
+
+import (
+	"bytes"
+
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type Iterator struct {
+	trie *Trie
+
+	Key   []byte
+	Value []byte
+}
+
+func NewIterator(trie *Trie) *Iterator {
+	return &Iterator{trie: trie, Key: []byte{0}}
+}
+
+func (self *Iterator) Next() bool {
+	self.trie.mu.Lock()
+	defer self.trie.mu.Unlock()
+
+	key := trie.RemTerm(trie.CompactHexDecode(string(self.Key)))
+	k := self.next(self.trie.root, key)
+
+	self.Key = []byte(trie.DecodeCompact(k))
+
+	return len(k) > 0
+
+}
+
+func (self *Iterator) next(node Node, key []byte) []byte {
+	if node == nil {
+		return nil
+	}
+
+	switch node := node.(type) {
+	case *FullNode:
+		if len(key) > 0 {
+			k := self.next(node.branch(key[0]), key[1:])
+			if k != nil {
+				return append([]byte{key[0]}, k...)
+			}
+		}
+
+		var r byte
+		if len(key) > 0 {
+			r = key[0] + 1
+		}
+
+		for i := r; i < 16; i++ {
+			k := self.key(node.branch(byte(i)))
+			if k != nil {
+				return append([]byte{i}, k...)
+			}
+		}
+
+	case *ShortNode:
+		k := trie.RemTerm(node.Key())
+		if vnode, ok := node.Value().(*ValueNode); ok {
+			if bytes.Compare([]byte(k), key) > 0 {
+				self.Value = vnode.Val()
+				return k
+			}
+		} else {
+			cnode := node.Value()
+
+			var ret []byte
+			skey := key[len(k):]
+			if trie.BeginsWith(key, k) {
+				ret = self.next(cnode, skey)
+			} else if bytes.Compare(k, key[:len(k)]) > 0 {
+				ret = self.key(node)
+			}
+
+			if ret != nil {
+				return append(k, ret...)
+			}
+		}
+	}
+
+	return nil
+}
+
+func (self *Iterator) key(node Node) []byte {
+	switch node := node.(type) {
+	case *ShortNode:
+		// Leaf node
+		if vnode, ok := node.Value().(*ValueNode); ok {
+			k := trie.RemTerm(node.Key())
+			self.Value = vnode.Val()
+
+			return k
+		} else {
+			k := trie.RemTerm(node.Key())
+			return append(k, self.key(node.Value())...)
+		}
+	case *FullNode:
+		if node.Value() != nil {
+			self.Value = node.Value().(*ValueNode).Val()
+
+			return []byte{16}
+		}
+
+		for i := 0; i < 16; i++ {
+			k := self.key(node.branch(byte(i)))
+			if k != nil {
+				return append([]byte{byte(i)}, k...)
+			}
+		}
+	}
+
+	return nil
+}
diff --git a/ptrie/iterator_test.go b/ptrie/iterator_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..acfc03d63371d5044584b31cdf93e614aea3e0b2
--- /dev/null
+++ b/ptrie/iterator_test.go
@@ -0,0 +1,33 @@
+package ptrie
+
+import "testing"
+
+func TestIterator(t *testing.T) {
+	trie := NewEmpty()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"dog", "puppy"},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	v := make(map[string]bool)
+	for _, val := range vals {
+		v[val.k] = false
+		trie.UpdateString(val.k, val.v)
+	}
+	trie.Commit()
+
+	it := trie.Iterator()
+	for it.Next() {
+		v[string(it.Key)] = true
+	}
+
+	for k, found := range v {
+		if !found {
+			t.Error("iterator didn't find", k)
+		}
+	}
+}
diff --git a/ptrie/node.go b/ptrie/node.go
new file mode 100644
index 0000000000000000000000000000000000000000..2c85dbce72869a81382a464f5be480c6dbc7e0cb
--- /dev/null
+++ b/ptrie/node.go
@@ -0,0 +1,40 @@
+package ptrie
+
+import "fmt"
+
+var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "[17]"}
+
+type Node interface {
+	Value() Node
+	Copy() Node // All nodes, for now, return them self
+	Dirty() bool
+	fstring(string) string
+	Hash() interface{}
+	RlpData() interface{}
+}
+
+// Value node
+func (self *ValueNode) String() string            { return self.fstring("") }
+func (self *FullNode) String() string             { return self.fstring("") }
+func (self *ShortNode) String() string            { return self.fstring("") }
+func (self *ValueNode) fstring(ind string) string { return fmt.Sprintf("%s ", self.data) }
+func (self *HashNode) fstring(ind string) string  { return fmt.Sprintf("%x ", self.key) }
+
+// Full node
+func (self *FullNode) fstring(ind string) string {
+	resp := fmt.Sprintf("[\n%s  ", ind)
+	for i, node := range self.nodes {
+		if node == nil {
+			resp += fmt.Sprintf("%s: <nil> ", indices[i])
+		} else {
+			resp += fmt.Sprintf("%s: %v", indices[i], node.fstring(ind+"  "))
+		}
+	}
+
+	return resp + fmt.Sprintf("\n%s] ", ind)
+}
+
+// Short node
+func (self *ShortNode) fstring(ind string) string {
+	return fmt.Sprintf("[ %s: %v ] ", self.key, self.value.fstring(ind+"  "))
+}
diff --git a/ptrie/shortnode.go b/ptrie/shortnode.go
new file mode 100644
index 0000000000000000000000000000000000000000..73ff2914bf638c99b4836232d111172f1774a2fe
--- /dev/null
+++ b/ptrie/shortnode.go
@@ -0,0 +1,31 @@
+package ptrie
+
+import "github.com/ethereum/go-ethereum/trie"
+
+type ShortNode struct {
+	trie  *Trie
+	key   []byte
+	value Node
+}
+
+func NewShortNode(t *Trie, key []byte, value Node) *ShortNode {
+	return &ShortNode{t, []byte(trie.CompactEncode(key)), value}
+}
+func (self *ShortNode) Value() Node {
+	self.value = self.trie.trans(self.value)
+
+	return self.value
+}
+func (self *ShortNode) Dirty() bool { return true }
+func (self *ShortNode) Copy() Node  { return NewShortNode(self.trie, self.key, self.value) }
+
+func (self *ShortNode) RlpData() interface{} {
+	return []interface{}{self.key, self.value.Hash()}
+}
+func (self *ShortNode) Hash() interface{} {
+	return self.trie.store(self)
+}
+
+func (self *ShortNode) Key() []byte {
+	return trie.CompactDecode(string(self.key))
+}
diff --git a/ptrie/trie.go b/ptrie/trie.go
new file mode 100644
index 0000000000000000000000000000000000000000..9fe9ea52a5606f71570d8788666f0dbc3714cd69
--- /dev/null
+++ b/ptrie/trie.go
@@ -0,0 +1,312 @@
+package ptrie
+
+import (
+	"bytes"
+	"container/list"
+	"fmt"
+	"sync"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+func ParanoiaCheck(t1 *Trie, backend Backend) (bool, *Trie) {
+	t2 := New(nil, backend)
+
+	it := t1.Iterator()
+	for it.Next() {
+		t2.Update(it.Key, it.Value)
+	}
+
+	return bytes.Compare(t2.Hash(), t1.Hash()) == 0, t2
+}
+
+type Trie struct {
+	mu       sync.Mutex
+	root     Node
+	roothash []byte
+	cache    *Cache
+
+	revisions *list.List
+}
+
+func New(root []byte, backend Backend) *Trie {
+	trie := &Trie{}
+	trie.revisions = list.New()
+	trie.roothash = root
+	trie.cache = NewCache(backend)
+
+	if root != nil {
+		value := ethutil.NewValueFromBytes(trie.cache.Get(root))
+		trie.root = trie.mknode(value)
+	}
+
+	return trie
+}
+
+func (self *Trie) Iterator() *Iterator {
+	return NewIterator(self)
+}
+
+// Legacy support
+func (self *Trie) Root() []byte { return self.Hash() }
+func (self *Trie) Hash() []byte {
+	var hash []byte
+	if self.root != nil {
+		//hash = self.root.Hash().([]byte)
+		t := self.root.Hash()
+		if byts, ok := t.([]byte); ok {
+			hash = byts
+		} else {
+			hash = crypto.Sha3(ethutil.Encode(self.root.RlpData()))
+		}
+	} else {
+		hash = crypto.Sha3(ethutil.Encode(""))
+	}
+
+	if !bytes.Equal(hash, self.roothash) {
+		self.revisions.PushBack(self.roothash)
+		self.roothash = hash
+	}
+
+	return hash
+}
+func (self *Trie) Commit() {
+	// Hash first
+	self.Hash()
+
+	self.cache.Flush()
+}
+
+// Reset should only be called if the trie has been hashed
+func (self *Trie) Reset() {
+	self.cache.Reset()
+
+	revision := self.revisions.Remove(self.revisions.Back()).([]byte)
+	self.roothash = revision
+	value := ethutil.NewValueFromBytes(self.cache.Get(self.roothash))
+	self.root = self.mknode(value)
+}
+
+func (self *Trie) UpdateString(key, value string) Node { return self.Update([]byte(key), []byte(value)) }
+func (self *Trie) Update(key, value []byte) Node {
+	self.mu.Lock()
+	defer self.mu.Unlock()
+
+	k := trie.CompactHexDecode(string(key))
+
+	if len(value) != 0 {
+		self.root = self.insert(self.root, k, &ValueNode{self, value})
+	} else {
+		self.root = self.delete(self.root, k)
+	}
+
+	return self.root
+}
+
+func (self *Trie) GetString(key string) []byte { return self.Get([]byte(key)) }
+func (self *Trie) Get(key []byte) []byte {
+	self.mu.Lock()
+	defer self.mu.Unlock()
+
+	k := trie.CompactHexDecode(string(key))
+
+	n := self.get(self.root, k)
+	if n != nil {
+		return n.(*ValueNode).Val()
+	}
+
+	return nil
+}
+
+func (self *Trie) DeleteString(key string) Node { return self.Delete([]byte(key)) }
+func (self *Trie) Delete(key []byte) Node {
+	self.mu.Lock()
+	defer self.mu.Unlock()
+
+	k := trie.CompactHexDecode(string(key))
+	self.root = self.delete(self.root, k)
+
+	return self.root
+}
+
+func (self *Trie) insert(node Node, key []byte, value Node) Node {
+	if len(key) == 0 {
+		return value
+	}
+
+	if node == nil {
+		return NewShortNode(self, key, value)
+	}
+
+	switch node := node.(type) {
+	case *ShortNode:
+		k := node.Key()
+		cnode := node.Value()
+		if bytes.Equal(k, key) {
+			return NewShortNode(self, key, value)
+		}
+
+		var n Node
+		matchlength := trie.MatchingNibbleLength(key, k)
+		if matchlength == len(k) {
+			n = self.insert(cnode, key[matchlength:], value)
+		} else {
+			pnode := self.insert(nil, k[matchlength+1:], cnode)
+			nnode := self.insert(nil, key[matchlength+1:], value)
+			fulln := NewFullNode(self)
+			fulln.set(k[matchlength], pnode)
+			fulln.set(key[matchlength], nnode)
+			n = fulln
+		}
+		if matchlength == 0 {
+			return n
+		}
+
+		return NewShortNode(self, key[:matchlength], n)
+
+	case *FullNode:
+		cpy := node.Copy().(*FullNode)
+		cpy.set(key[0], self.insert(node.branch(key[0]), key[1:], value))
+
+		return cpy
+
+	default:
+		panic("Invalid node")
+	}
+}
+
+func (self *Trie) get(node Node, key []byte) Node {
+	if len(key) == 0 {
+		return node
+	}
+
+	if node == nil {
+		return nil
+	}
+
+	switch node := node.(type) {
+	case *ShortNode:
+		k := node.Key()
+		cnode := node.Value()
+
+		if len(key) >= len(k) && bytes.Equal(k, key[:len(k)]) {
+			return self.get(cnode, key[len(k):])
+		}
+
+		return nil
+	case *FullNode:
+		return self.get(node.branch(key[0]), key[1:])
+	default:
+		panic(fmt.Sprintf("%T: invalid node: %v", node, node))
+	}
+}
+
+func (self *Trie) delete(node Node, key []byte) Node {
+	if len(key) == 0 {
+		return nil
+	}
+
+	switch node := node.(type) {
+	case *ShortNode:
+		k := node.Key()
+		cnode := node.Value()
+		if bytes.Equal(key, k) {
+			return nil
+		} else if bytes.Equal(key[:len(k)], k) {
+			child := self.delete(cnode, key[len(k):])
+
+			var n Node
+			switch child := child.(type) {
+			case *ShortNode:
+				nkey := append(k, child.Key()...)
+				n = NewShortNode(self, nkey, child.Value())
+			case *FullNode:
+				n = NewShortNode(self, node.key, child)
+			}
+
+			return n
+		} else {
+			return node
+		}
+
+	case *FullNode:
+		n := node.Copy().(*FullNode)
+		n.set(key[0], self.delete(n.branch(key[0]), key[1:]))
+
+		pos := -1
+		for i := 0; i < 17; i++ {
+			if n.branch(byte(i)) != nil {
+				if pos == -1 {
+					pos = i
+				} else {
+					pos = -2
+				}
+			}
+		}
+
+		var nnode Node
+		if pos == 16 {
+			nnode = NewShortNode(self, []byte{16}, n.branch(byte(pos)))
+		} else if pos >= 0 {
+			cnode := n.branch(byte(pos))
+			switch cnode := cnode.(type) {
+			case *ShortNode:
+				// Stitch keys
+				k := append([]byte{byte(pos)}, cnode.Key()...)
+				nnode = NewShortNode(self, k, cnode.Value())
+			case *FullNode:
+				nnode = NewShortNode(self, []byte{byte(pos)}, n.branch(byte(pos)))
+			}
+		} else {
+			nnode = n
+		}
+
+		return nnode
+
+	default:
+		panic("Invalid node")
+	}
+}
+
+// casting functions and cache storing
+func (self *Trie) mknode(value *ethutil.Value) Node {
+	l := value.Len()
+	switch l {
+	case 2:
+		return NewShortNode(self, trie.CompactDecode(string(value.Get(0).Bytes())), self.mknode(value.Get(1)))
+	case 17:
+		fnode := NewFullNode(self)
+		for i := 0; i < l; i++ {
+			fnode.set(byte(i), self.mknode(value.Get(i)))
+		}
+		return fnode
+	case 32:
+		return &HashNode{value.Bytes()}
+	default:
+		return &ValueNode{self, value.Bytes()}
+	}
+}
+
+func (self *Trie) trans(node Node) Node {
+	switch node := node.(type) {
+	case *HashNode:
+		value := ethutil.NewValueFromBytes(self.cache.Get(node.key))
+		return self.mknode(value)
+	default:
+		return node
+	}
+}
+
+func (self *Trie) store(node Node) interface{} {
+	data := ethutil.Encode(node)
+	if len(data) >= 32 {
+		key := crypto.Sha3(data)
+		self.cache.Put(key, data)
+
+		return key
+	}
+
+	return node.RlpData()
+}
diff --git a/ptrie/trie_test.go b/ptrie/trie_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..5b1c641401ae50bfedd6940ccf0d6af0e7c1e6b0
--- /dev/null
+++ b/ptrie/trie_test.go
@@ -0,0 +1,259 @@
+package ptrie
+
+import (
+	"bytes"
+	"fmt"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type Db map[string][]byte
+
+func (self Db) Get(k []byte) ([]byte, error) { return self[string(k)], nil }
+func (self Db) Put(k, v []byte)              { self[string(k)] = v }
+
+// Used for testing
+func NewEmpty() *Trie {
+	return New(nil, make(Db))
+}
+
+func TestEmptyTrie(t *testing.T) {
+	trie := NewEmpty()
+	res := trie.Hash()
+	exp := crypto.Sha3(ethutil.Encode(""))
+	if !bytes.Equal(res, exp) {
+		t.Errorf("expected %x got %x", exp, res)
+	}
+}
+
+func TestInsert(t *testing.T) {
+	trie := NewEmpty()
+
+	trie.UpdateString("doe", "reindeer")
+	trie.UpdateString("dog", "puppy")
+	trie.UpdateString("dogglesworth", "cat")
+
+	exp := ethutil.Hex2Bytes("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3")
+	root := trie.Hash()
+	if !bytes.Equal(root, exp) {
+		t.Errorf("exp %x got %x", exp, root)
+	}
+
+	trie = NewEmpty()
+	trie.UpdateString("A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+
+	exp = ethutil.Hex2Bytes("d23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab")
+	root = trie.Hash()
+	if !bytes.Equal(root, exp) {
+		t.Errorf("exp %x got %x", exp, root)
+	}
+}
+
+func TestGet(t *testing.T) {
+	trie := NewEmpty()
+
+	trie.UpdateString("doe", "reindeer")
+	trie.UpdateString("dog", "puppy")
+	trie.UpdateString("dogglesworth", "cat")
+
+	res := trie.GetString("dog")
+	if !bytes.Equal(res, []byte("puppy")) {
+		t.Errorf("expected puppy got %x", res)
+	}
+
+	unknown := trie.GetString("unknown")
+	if unknown != nil {
+		t.Errorf("expected nil got %x", unknown)
+	}
+}
+
+func TestDelete(t *testing.T) {
+	trie := NewEmpty()
+
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+	}
+	for _, val := range vals {
+		if val.v != "" {
+			trie.UpdateString(val.k, val.v)
+		} else {
+			trie.DeleteString(val.k)
+		}
+	}
+
+	hash := trie.Hash()
+	exp := ethutil.Hex2Bytes("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84")
+	if !bytes.Equal(hash, exp) {
+		t.Errorf("expected %x got %x", exp, hash)
+	}
+}
+
+func TestEmptyValues(t *testing.T) {
+	trie := NewEmpty()
+
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+	}
+	for _, val := range vals {
+		trie.UpdateString(val.k, val.v)
+	}
+
+	hash := trie.Hash()
+	exp := ethutil.Hex2Bytes("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84")
+	if !bytes.Equal(hash, exp) {
+		t.Errorf("expected %x got %x", exp, hash)
+	}
+}
+
+func TestReplication(t *testing.T) {
+	trie := NewEmpty()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	for _, val := range vals {
+		trie.UpdateString(val.k, val.v)
+	}
+	trie.Commit()
+
+	trie2 := New(trie.roothash, trie.cache.backend)
+	if string(trie2.GetString("horse")) != "stallion" {
+		t.Error("expected to have harse => stallion")
+	}
+
+	hash := trie2.Hash()
+	exp := trie.Hash()
+	if !bytes.Equal(hash, exp) {
+		t.Errorf("root failure. expected %x got %x", exp, hash)
+	}
+
+}
+
+func TestReset(t *testing.T) {
+	trie := NewEmpty()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+	}
+	for _, val := range vals {
+		trie.UpdateString(val.k, val.v)
+	}
+	trie.Commit()
+
+	before := ethutil.CopyBytes(trie.roothash)
+	trie.UpdateString("should", "revert")
+	trie.Hash()
+	// Should have no effect
+	trie.Hash()
+	trie.Hash()
+	// ###
+
+	trie.Reset()
+	after := ethutil.CopyBytes(trie.roothash)
+
+	if !bytes.Equal(before, after) {
+		t.Errorf("expected roots to be equal. %x - %x", before, after)
+	}
+}
+
+func TestParanoia(t *testing.T) {
+	t.Skip()
+	trie := NewEmpty()
+
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	for _, val := range vals {
+		trie.UpdateString(val.k, val.v)
+	}
+	trie.Commit()
+
+	ok, t2 := ParanoiaCheck(trie, trie.cache.backend)
+	if !ok {
+		t.Errorf("trie paranoia check failed %x %x", trie.roothash, t2.roothash)
+	}
+}
+
+// Not an actual test
+func TestOutput(t *testing.T) {
+	t.Skip()
+
+	base := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+	trie := NewEmpty()
+	for i := 0; i < 50; i++ {
+		trie.UpdateString(fmt.Sprintf("%s%d", base, i), "valueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")
+	}
+	fmt.Println("############################## FULL ################################")
+	fmt.Println(trie.root)
+
+	trie.Commit()
+	fmt.Println("############################## SMALL ################################")
+	trie2 := New(trie.roothash, trie.cache.backend)
+	trie2.GetString(base + "20")
+	fmt.Println(trie2.root)
+}
+
+func BenchmarkGets(b *testing.B) {
+	trie := NewEmpty()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	for _, val := range vals {
+		trie.UpdateString(val.k, val.v)
+	}
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.Get([]byte("horse"))
+	}
+}
+
+func BenchmarkUpdate(b *testing.B) {
+	trie := NewEmpty()
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.UpdateString(fmt.Sprintf("aaaaaaaaa%d", i), "value")
+	}
+	trie.Hash()
+}
diff --git a/ptrie/valuenode.go b/ptrie/valuenode.go
new file mode 100644
index 0000000000000000000000000000000000000000..c593eb6c6021584c49bd93a862758fb70305968e
--- /dev/null
+++ b/ptrie/valuenode.go
@@ -0,0 +1,13 @@
+package ptrie
+
+type ValueNode struct {
+	trie *Trie
+	data []byte
+}
+
+func (self *ValueNode) Value() Node          { return self } // Best not to call :-)
+func (self *ValueNode) Val() []byte          { return self.data }
+func (self *ValueNode) Dirty() bool          { return true }
+func (self *ValueNode) Copy() Node           { return &ValueNode{self.trie, self.data} }
+func (self *ValueNode) RlpData() interface{} { return self.data }
+func (self *ValueNode) Hash() interface{}    { return self.data }
diff --git a/rlp/decode.go b/rlp/decode.go
new file mode 100644
index 0000000000000000000000000000000000000000..712d9fcf184a446eaf5ddb4f867f65dbeffbfdf1
--- /dev/null
+++ b/rlp/decode.go
@@ -0,0 +1,743 @@
+package rlp
+
+import (
+	"bufio"
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"io"
+	"math/big"
+	"reflect"
+)
+
+var (
+	errNoPointer     = errors.New("rlp: interface given to Decode must be a pointer")
+	errDecodeIntoNil = errors.New("rlp: pointer given to Decode must not be nil")
+)
+
+// Decoder is implemented by types that require custom RLP
+// decoding rules or need to decode into private fields.
+//
+// The DecodeRLP method should read one value from the given
+// Stream. It is not forbidden to read less or more, but it might
+// be confusing.
+type Decoder interface {
+	DecodeRLP(*Stream) error
+}
+
+// Decode parses RLP-encoded data from r and stores the result in the
+// value pointed to by val. Val must be a non-nil pointer. If r does
+// not implement ByteReader, Decode will do its own buffering.
+//
+// Decode uses the following type-dependent decoding rules:
+//
+// If the type implements the Decoder interface, decode calls
+// DecodeRLP.
+//
+// To decode into a pointer, Decode will set the pointer to nil if the
+// input has size zero or the input is a single byte with value zero.
+// If the input has nonzero size, Decode will allocate a new value of
+// the type being pointed to.
+//
+// To decode into a struct, Decode expects the input to be an RLP
+// list. The decoded elements of the list are assigned to each public
+// field in the order given by the struct's definition. If the input
+// list has too few elements, no error is returned and the remaining
+// fields will have the zero value.
+// Recursive struct types are supported.
+//
+// To decode into a slice, the input must be a list and the resulting
+// slice will contain the input elements in order.
+// As a special case, if the slice has a byte-size element type, the input
+// can also be an RLP string.
+//
+// To decode into a Go string, the input must be an RLP string. The
+// bytes are taken as-is and will not necessarily be valid UTF-8.
+//
+// To decode into an unsigned integer type, the input must also be an RLP
+// string. The bytes are interpreted as a big endian representation of
+// the integer. If the RLP string is larger than the bit size of the
+// type, Decode will return an error. Decode also supports *big.Int.
+// There is no size limit for big integers.
+//
+// To decode into an interface value, Decode stores one of these
+// in the value:
+//
+//	[]interface{}, for RLP lists
+//	[]byte, for RLP strings
+//
+// Non-empty interface types are not supported, nor are booleans,
+// signed integers, floating point numbers, maps, channels and
+// functions.
+func Decode(r io.Reader, val interface{}) error {
+	return NewStream(r).Decode(val)
+}
+
+type decodeError struct {
+	msg string
+	typ reflect.Type
+}
+
+func (err decodeError) Error() string {
+	return fmt.Sprintf("rlp: %s for %v", err.msg, err.typ)
+}
+
+func wrapStreamError(err error, typ reflect.Type) error {
+	switch err {
+	case ErrExpectedList:
+		return decodeError{"expected input list", typ}
+	case ErrExpectedString:
+		return decodeError{"expected input string or byte", typ}
+	case errUintOverflow:
+		return decodeError{"input string too long", typ}
+	case errNotAtEOL:
+		return decodeError{"input list has too many elements", typ}
+	}
+	return err
+}
+
+var (
+	decoderInterface = reflect.TypeOf(new(Decoder)).Elem()
+	bigInt           = reflect.TypeOf(big.Int{})
+)
+
+func makeDecoder(typ reflect.Type) (dec decoder, err error) {
+	kind := typ.Kind()
+	switch {
+	case typ.Implements(decoderInterface):
+		return decodeDecoder, nil
+	case kind != reflect.Ptr && reflect.PtrTo(typ).Implements(decoderInterface):
+		return decodeDecoderNoPtr, nil
+	case typ.AssignableTo(reflect.PtrTo(bigInt)):
+		return decodeBigInt, nil
+	case typ.AssignableTo(bigInt):
+		return decodeBigIntNoPtr, nil
+	case isUint(kind):
+		return decodeUint, nil
+	case kind == reflect.String:
+		return decodeString, nil
+	case kind == reflect.Slice || kind == reflect.Array:
+		return makeListDecoder(typ)
+	case kind == reflect.Struct:
+		return makeStructDecoder(typ)
+	case kind == reflect.Ptr:
+		return makePtrDecoder(typ)
+	case kind == reflect.Interface && typ.NumMethod() == 0:
+		return decodeInterface, nil
+	default:
+		return nil, fmt.Errorf("rlp: type %v is not RLP-serializable", typ)
+	}
+}
+
+func decodeUint(s *Stream, val reflect.Value) error {
+	typ := val.Type()
+	num, err := s.uint(typ.Bits())
+	if err != nil {
+		return wrapStreamError(err, val.Type())
+	}
+	val.SetUint(num)
+	return nil
+}
+
+func decodeString(s *Stream, val reflect.Value) error {
+	b, err := s.Bytes()
+	if err != nil {
+		return wrapStreamError(err, val.Type())
+	}
+	val.SetString(string(b))
+	return nil
+}
+
+func decodeBigIntNoPtr(s *Stream, val reflect.Value) error {
+	return decodeBigInt(s, val.Addr())
+}
+
+func decodeBigInt(s *Stream, val reflect.Value) error {
+	b, err := s.Bytes()
+	if err != nil {
+		return wrapStreamError(err, val.Type())
+	}
+	i := val.Interface().(*big.Int)
+	if i == nil {
+		i = new(big.Int)
+		val.Set(reflect.ValueOf(i))
+	}
+	i.SetBytes(b)
+	return nil
+}
+
+func makeListDecoder(typ reflect.Type) (decoder, error) {
+	etype := typ.Elem()
+	if etype.Kind() == reflect.Uint8 && !reflect.PtrTo(etype).Implements(decoderInterface) {
+		if typ.Kind() == reflect.Array {
+			return decodeByteArray, nil
+		} else {
+			return decodeByteSlice, nil
+		}
+	}
+	etypeinfo, err := cachedTypeInfo1(etype)
+	if err != nil {
+		return nil, err
+	}
+
+	if typ.Kind() == reflect.Array {
+		return func(s *Stream, val reflect.Value) error {
+			return decodeListArray(s, val, etypeinfo.decoder)
+		}, nil
+	}
+	return func(s *Stream, val reflect.Value) error {
+		return decodeListSlice(s, val, etypeinfo.decoder)
+	}, nil
+}
+
+func decodeListSlice(s *Stream, val reflect.Value, elemdec decoder) error {
+	size, err := s.List()
+	if err != nil {
+		return wrapStreamError(err, val.Type())
+	}
+	if size == 0 {
+		val.Set(reflect.MakeSlice(val.Type(), 0, 0))
+		return s.ListEnd()
+	}
+
+	i := 0
+	for ; ; i++ {
+		// grow slice if necessary
+		if i >= val.Cap() {
+			newcap := val.Cap() + val.Cap()/2
+			if newcap < 4 {
+				newcap = 4
+			}
+			newv := reflect.MakeSlice(val.Type(), val.Len(), newcap)
+			reflect.Copy(newv, val)
+			val.Set(newv)
+		}
+		if i >= val.Len() {
+			val.SetLen(i + 1)
+		}
+		// decode into element
+		if err := elemdec(s, val.Index(i)); err == EOL {
+			break
+		} else if err != nil {
+			return err
+		}
+	}
+	if i < val.Len() {
+		val.SetLen(i)
+	}
+	return s.ListEnd()
+}
+
+func decodeListArray(s *Stream, val reflect.Value, elemdec decoder) error {
+	size, err := s.List()
+	if err != nil {
+		return err
+	}
+	if size == 0 {
+		zero(val, 0)
+		return s.ListEnd()
+	}
+
+	// The approach here is stolen from package json, although we differ
+	// in the semantics for arrays. package json discards remaining
+	// elements that would not fit into the array. We generate an error in
+	// this case because we'd be losing information.
+	vlen := val.Len()
+	i := 0
+	for ; i < vlen; i++ {
+		if err := elemdec(s, val.Index(i)); err == EOL {
+			break
+		} else if err != nil {
+			return err
+		}
+	}
+	if i < vlen {
+		zero(val, i)
+	}
+	return wrapStreamError(s.ListEnd(), val.Type())
+}
+
+func decodeByteSlice(s *Stream, val reflect.Value) error {
+	kind, _, err := s.Kind()
+	if err != nil {
+		return err
+	}
+	if kind == List {
+		return decodeListSlice(s, val, decodeUint)
+	}
+	b, err := s.Bytes()
+	if err == nil {
+		val.SetBytes(b)
+	}
+	return err
+}
+
+func decodeByteArray(s *Stream, val reflect.Value) error {
+	kind, size, err := s.Kind()
+	if err != nil {
+		return err
+	}
+	switch kind {
+	case Byte:
+		if val.Len() == 0 {
+			return decodeError{"input string too long", val.Type()}
+		}
+		bv, _ := s.Uint()
+		val.Index(0).SetUint(bv)
+		zero(val, 1)
+	case String:
+		if uint64(val.Len()) < size {
+			return decodeError{"input string too long", val.Type()}
+		}
+		slice := val.Slice(0, int(size)).Interface().([]byte)
+		if err := s.readFull(slice); err != nil {
+			return err
+		}
+		zero(val, int(size))
+	case List:
+		return decodeListArray(s, val, decodeUint)
+	}
+	return nil
+}
+
+func zero(val reflect.Value, start int) {
+	z := reflect.Zero(val.Type().Elem())
+	end := val.Len()
+	for i := start; i < end; i++ {
+		val.Index(i).Set(z)
+	}
+}
+
+type field struct {
+	index int
+	info  *typeinfo
+}
+
+func makeStructDecoder(typ reflect.Type) (decoder, error) {
+	var fields []field
+	for i := 0; i < typ.NumField(); i++ {
+		if f := typ.Field(i); f.PkgPath == "" { // exported
+			info, err := cachedTypeInfo1(f.Type)
+			if err != nil {
+				return nil, err
+			}
+			fields = append(fields, field{i, info})
+		}
+	}
+	dec := func(s *Stream, val reflect.Value) (err error) {
+		if _, err = s.List(); err != nil {
+			return wrapStreamError(err, typ)
+		}
+		for _, f := range fields {
+			err = f.info.decoder(s, val.Field(f.index))
+			if err == EOL {
+				// too few elements. leave the rest at their zero value.
+				break
+			} else if err != nil {
+				return err
+			}
+		}
+		return wrapStreamError(s.ListEnd(), typ)
+	}
+	return dec, nil
+}
+
+func makePtrDecoder(typ reflect.Type) (decoder, error) {
+	etype := typ.Elem()
+	etypeinfo, err := cachedTypeInfo1(etype)
+	if err != nil {
+		return nil, err
+	}
+	dec := func(s *Stream, val reflect.Value) (err error) {
+		_, size, err := s.Kind()
+		if err != nil || size == 0 && s.byteval == 0 {
+			val.Set(reflect.Zero(typ)) // set to nil
+			return err
+		}
+		newval := val
+		if val.IsNil() {
+			newval = reflect.New(etype)
+		}
+		if err = etypeinfo.decoder(s, newval.Elem()); err == nil {
+			val.Set(newval)
+		}
+		return err
+	}
+	return dec, nil
+}
+
+var ifsliceType = reflect.TypeOf([]interface{}{})
+
+func decodeInterface(s *Stream, val reflect.Value) error {
+	kind, _, err := s.Kind()
+	if err != nil {
+		return err
+	}
+	if kind == List {
+		slice := reflect.New(ifsliceType).Elem()
+		if err := decodeListSlice(s, slice, decodeInterface); err != nil {
+			return err
+		}
+		val.Set(slice)
+	} else {
+		b, err := s.Bytes()
+		if err != nil {
+			return err
+		}
+		val.Set(reflect.ValueOf(b))
+	}
+	return nil
+}
+
+// This decoder is used for non-pointer values of types
+// that implement the Decoder interface using a pointer receiver.
+func decodeDecoderNoPtr(s *Stream, val reflect.Value) error {
+	return val.Addr().Interface().(Decoder).DecodeRLP(s)
+}
+
+func decodeDecoder(s *Stream, val reflect.Value) error {
+	// Decoder instances are not handled using the pointer rule if the type
+	// implements Decoder with pointer receiver (i.e. always)
+	// because it might handle empty values specially.
+	// We need to allocate one here in this case, like makePtrDecoder does.
+	if val.Kind() == reflect.Ptr && val.IsNil() {
+		val.Set(reflect.New(val.Type().Elem()))
+	}
+	return val.Interface().(Decoder).DecodeRLP(s)
+}
+
+// Kind represents the kind of value contained in an RLP stream.
+type Kind int
+
+const (
+	Byte Kind = iota
+	String
+	List
+)
+
+func (k Kind) String() string {
+	switch k {
+	case Byte:
+		return "Byte"
+	case String:
+		return "String"
+	case List:
+		return "List"
+	default:
+		return fmt.Sprintf("Unknown(%d)", k)
+	}
+}
+
+var (
+	// EOL is returned when the end of the current list
+	// has been reached during streaming.
+	EOL = errors.New("rlp: end of list")
+
+	// Other errors
+	ErrExpectedString = errors.New("rlp: expected String or Byte")
+	ErrExpectedList   = errors.New("rlp: expected List")
+	ErrElemTooLarge   = errors.New("rlp: element is larger than containing list")
+
+	// internal errors
+	errNotInList = errors.New("rlp: call of ListEnd outside of any list")
+	errNotAtEOL  = errors.New("rlp: call of ListEnd not positioned at EOL")
+)
+
+// ByteReader must be implemented by any input reader for a Stream. It
+// is implemented by e.g. bufio.Reader and bytes.Reader.
+type ByteReader interface {
+	io.Reader
+	io.ByteReader
+}
+
+// Stream can be used for piecemeal decoding of an input stream. This
+// is useful if the input is very large or if the decoding rules for a
+// type depend on the input structure. Stream does not keep an
+// internal buffer. After decoding a value, the input reader will be
+// positioned just before the type information for the next value.
+//
+// When decoding a list and the input position reaches the declared
+// length of the list, all operations will return error EOL.
+// The end of the list must be acknowledged using ListEnd to continue
+// reading the enclosing list.
+//
+// Stream is not safe for concurrent use.
+type Stream struct {
+	r       ByteReader
+	uintbuf []byte
+
+	kind    Kind   // kind of value ahead
+	size    uint64 // size of value ahead
+	byteval byte   // value of single byte in type tag
+	stack   []listpos
+}
+
+type listpos struct{ pos, size uint64 }
+
+// NewStream creates a new stream reading from r.
+// If r does not implement ByteReader, the Stream will
+// introduce its own buffering.
+func NewStream(r io.Reader) *Stream {
+	s := new(Stream)
+	s.Reset(r)
+	return s
+}
+
+// NewListStream creates a new stream that pretends to be positioned
+// at an encoded list of the given length.
+func NewListStream(r io.Reader, len uint64) *Stream {
+	s := new(Stream)
+	s.Reset(r)
+	s.kind = List
+	s.size = len
+	return s
+}
+
+// Bytes reads an RLP string and returns its contents as a byte slice.
+// If the input does not contain an RLP string, the returned
+// error will be ErrExpectedString.
+func (s *Stream) Bytes() ([]byte, error) {
+	kind, size, err := s.Kind()
+	if err != nil {
+		return nil, err
+	}
+	switch kind {
+	case Byte:
+		s.kind = -1 // rearm Kind
+		return []byte{s.byteval}, nil
+	case String:
+		b := make([]byte, size)
+		if err = s.readFull(b); err != nil {
+			return nil, err
+		}
+		return b, nil
+	default:
+		return nil, ErrExpectedString
+	}
+}
+
+var errUintOverflow = errors.New("rlp: uint overflow")
+
+// Uint reads an RLP string of up to 8 bytes and returns its contents
+// as an unsigned integer. If the input does not contain an RLP string, the
+// returned error will be ErrExpectedString.
+func (s *Stream) Uint() (uint64, error) {
+	return s.uint(64)
+}
+
+func (s *Stream) uint(maxbits int) (uint64, error) {
+	kind, size, err := s.Kind()
+	if err != nil {
+		return 0, err
+	}
+	switch kind {
+	case Byte:
+		s.kind = -1 // rearm Kind
+		return uint64(s.byteval), nil
+	case String:
+		if size > uint64(maxbits/8) {
+			return 0, errUintOverflow
+		}
+		return s.readUint(byte(size))
+	default:
+		return 0, ErrExpectedString
+	}
+}
+
+// List starts decoding an RLP list. If the input does not contain a
+// list, the returned error will be ErrExpectedList. When the list's
+// end has been reached, any Stream operation will return EOL.
+func (s *Stream) List() (size uint64, err error) {
+	kind, size, err := s.Kind()
+	if err != nil {
+		return 0, err
+	}
+	if kind != List {
+		return 0, ErrExpectedList
+	}
+	s.stack = append(s.stack, listpos{0, size})
+	s.kind = -1
+	s.size = 0
+	return size, nil
+}
+
+// ListEnd returns to the enclosing list.
+// The input reader must be positioned at the end of a list.
+func (s *Stream) ListEnd() error {
+	if len(s.stack) == 0 {
+		return errNotInList
+	}
+	tos := s.stack[len(s.stack)-1]
+	if tos.pos != tos.size {
+		return errNotAtEOL
+	}
+	s.stack = s.stack[:len(s.stack)-1] // pop
+	if len(s.stack) > 0 {
+		s.stack[len(s.stack)-1].pos += tos.size
+	}
+	s.kind = -1
+	s.size = 0
+	return nil
+}
+
+// Decode decodes a value and stores the result in the value pointed
+// to by val. Please see the documentation for the Decode function
+// to learn about the decoding rules.
+func (s *Stream) Decode(val interface{}) error {
+	if val == nil {
+		return errDecodeIntoNil
+	}
+	rval := reflect.ValueOf(val)
+	rtyp := rval.Type()
+	if rtyp.Kind() != reflect.Ptr {
+		return errNoPointer
+	}
+	if rval.IsNil() {
+		return errDecodeIntoNil
+	}
+	info, err := cachedTypeInfo(rtyp.Elem())
+	if err != nil {
+		return err
+	}
+	return info.decoder(s, rval.Elem())
+}
+
+// Reset discards any information about the current decoding context
+// and starts reading from r. If r does not also implement ByteReader,
+// Stream will do its own buffering.
+func (s *Stream) Reset(r io.Reader) {
+	bufr, ok := r.(ByteReader)
+	if !ok {
+		bufr = bufio.NewReader(r)
+	}
+	s.r = bufr
+	s.stack = s.stack[:0]
+	s.size = 0
+	s.kind = -1
+	if s.uintbuf == nil {
+		s.uintbuf = make([]byte, 8)
+	}
+}
+
+// Kind returns the kind and size of the next value in the
+// input stream.
+//
+// The returned size is the number of bytes that make up the value.
+// For kind == Byte, the size is zero because the value is
+// contained in the type tag.
+//
+// The first call to Kind will read size information from the input
+// reader and leave it positioned at the start of the actual bytes of
+// the value. Subsequent calls to Kind (until the value is decoded)
+// will not advance the input reader and return cached information.
+func (s *Stream) Kind() (kind Kind, size uint64, err error) {
+	var tos *listpos
+	if len(s.stack) > 0 {
+		tos = &s.stack[len(s.stack)-1]
+	}
+	if s.kind < 0 {
+		if tos != nil && tos.pos == tos.size {
+			return 0, 0, EOL
+		}
+		kind, size, err = s.readKind()
+		if err != nil {
+			return 0, 0, err
+		}
+		s.kind, s.size = kind, size
+	}
+	if tos != nil && tos.pos+s.size > tos.size {
+		return 0, 0, ErrElemTooLarge
+	}
+	return s.kind, s.size, nil
+}
+
+func (s *Stream) readKind() (kind Kind, size uint64, err error) {
+	b, err := s.readByte()
+	if err != nil {
+		return 0, 0, err
+	}
+	s.byteval = 0
+	switch {
+	case b < 0x80:
+		// For a single byte whose value is in the [0x00, 0x7F] range, that byte
+		// is its own RLP encoding.
+		s.byteval = b
+		return Byte, 0, nil
+	case b < 0xB8:
+		// Otherwise, if a string is 0-55 bytes long,
+		// the RLP encoding consists of a single byte with value 0x80 plus the
+		// length of the string followed by the string. The range of the first
+		// byte is thus [0x80, 0xB7].
+		return String, uint64(b - 0x80), nil
+	case b < 0xC0:
+		// If a string is more than 55 bytes long, the
+		// RLP encoding consists of a single byte with value 0xB7 plus the length
+		// of the length of the string in binary form, followed by the length of
+		// the string, followed by the string. For example, a length-1024 string
+		// would be encoded as 0xB90400 followed by the string. The range of
+		// the first byte is thus [0xB8, 0xBF].
+		size, err = s.readUint(b - 0xB7)
+		return String, size, err
+	case b < 0xF8:
+		// If the total payload of a list
+		// (i.e. the combined length of all its items) is 0-55 bytes long, the
+		// RLP encoding consists of a single byte with value 0xC0 plus the length
+		// of the list followed by the concatenation of the RLP encodings of the
+		// items. The range of the first byte is thus [0xC0, 0xF7].
+		return List, uint64(b - 0xC0), nil
+	default:
+		// If the total payload of a list is more than 55 bytes long,
+		// the RLP encoding consists of a single byte with value 0xF7
+		// plus the length of the length of the payload in binary
+		// form, followed by the length of the payload, followed by
+		// the concatenation of the RLP encodings of the items. The
+		// range of the first byte is thus [0xF8, 0xFF].
+		size, err = s.readUint(b - 0xF7)
+		return List, size, err
+	}
+}
+
+func (s *Stream) readUint(size byte) (uint64, error) {
+	if size == 1 {
+		b, err := s.readByte()
+		if err == io.EOF {
+			err = io.ErrUnexpectedEOF
+		}
+		return uint64(b), err
+	}
+	start := int(8 - size)
+	for i := 0; i < start; i++ {
+		s.uintbuf[i] = 0
+	}
+	err := s.readFull(s.uintbuf[start:])
+	return binary.BigEndian.Uint64(s.uintbuf), err
+}
+
+func (s *Stream) readFull(buf []byte) (err error) {
+	s.willRead(uint64(len(buf)))
+	var nn, n int
+	for n < len(buf) && err == nil {
+		nn, err = s.r.Read(buf[n:])
+		n += nn
+	}
+	if err == io.EOF {
+		err = io.ErrUnexpectedEOF
+	}
+	return err
+}
+
+func (s *Stream) readByte() (byte, error) {
+	s.willRead(1)
+	b, err := s.r.ReadByte()
+	if len(s.stack) > 0 && err == io.EOF {
+		err = io.ErrUnexpectedEOF
+	}
+	return b, err
+}
+
+func (s *Stream) willRead(n uint64) {
+	s.kind = -1 // rearm Kind
+	if len(s.stack) > 0 {
+		s.stack[len(s.stack)-1].pos += n
+	}
+}
diff --git a/rlp/decode_test.go b/rlp/decode_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..7a1743937db7f7e7ddcd30f23c014fcc90dd3204
--- /dev/null
+++ b/rlp/decode_test.go
@@ -0,0 +1,527 @@
+package rlp
+
+import (
+	"bytes"
+	"encoding/hex"
+	"fmt"
+	"io"
+	"math/big"
+	"reflect"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func TestStreamKind(t *testing.T) {
+	tests := []struct {
+		input    string
+		wantKind Kind
+		wantLen  uint64
+	}{
+		{"00", Byte, 0},
+		{"01", Byte, 0},
+		{"7F", Byte, 0},
+		{"80", String, 0},
+		{"B7", String, 55},
+		{"B800", String, 0},
+		{"B90400", String, 1024},
+		{"BA000400", String, 1024},
+		{"BB00000400", String, 1024},
+		{"BFFFFFFFFFFFFFFFFF", String, ^uint64(0)},
+		{"C0", List, 0},
+		{"C8", List, 8},
+		{"F7", List, 55},
+		{"F800", List, 0},
+		{"F804", List, 4},
+		{"F90400", List, 1024},
+		{"FFFFFFFFFFFFFFFFFF", List, ^uint64(0)},
+	}
+
+	for i, test := range tests {
+		s := NewStream(bytes.NewReader(unhex(test.input)))
+		kind, len, err := s.Kind()
+		if err != nil {
+			t.Errorf("test %d: Type returned error: %v", i, err)
+			continue
+		}
+		if kind != test.wantKind {
+			t.Errorf("test %d: kind mismatch: got %d, want %d", i, kind, test.wantKind)
+		}
+		if len != test.wantLen {
+			t.Errorf("test %d: len mismatch: got %d, want %d", i, len, test.wantLen)
+		}
+	}
+}
+
+func TestNewListStream(t *testing.T) {
+	ls := NewListStream(bytes.NewReader(unhex("0101010101")), 3)
+	if k, size, err := ls.Kind(); k != List || size != 3 || err != nil {
+		t.Errorf("Kind() returned (%v, %d, %v), expected (List, 3, nil)", k, size, err)
+	}
+	if size, err := ls.List(); size != 3 || err != nil {
+		t.Errorf("List() returned (%d, %v), expected (3, nil)", size, err)
+	}
+	for i := 0; i < 3; i++ {
+		if val, err := ls.Uint(); val != 1 || err != nil {
+			t.Errorf("Uint() returned (%d, %v), expected (1, nil)", val, err)
+		}
+	}
+	if err := ls.ListEnd(); err != nil {
+		t.Errorf("ListEnd() returned %v, expected (3, nil)", err)
+	}
+}
+
+func TestStreamErrors(t *testing.T) {
+	type calls []string
+	tests := []struct {
+		string
+		calls
+		error
+	}{
+		{"", calls{"Kind"}, io.EOF},
+		{"", calls{"List"}, io.EOF},
+		{"", calls{"Uint"}, io.EOF},
+		{"C0", calls{"Bytes"}, ErrExpectedString},
+		{"C0", calls{"Uint"}, ErrExpectedString},
+		{"81", calls{"Bytes"}, io.ErrUnexpectedEOF},
+		{"81", calls{"Uint"}, io.ErrUnexpectedEOF},
+		{"BFFFFFFFFFFFFFFF", calls{"Bytes"}, io.ErrUnexpectedEOF},
+		{"89000000000000000001", calls{"Uint"}, errUintOverflow},
+		{"00", calls{"List"}, ErrExpectedList},
+		{"80", calls{"List"}, ErrExpectedList},
+		{"C0", calls{"List", "Uint"}, EOL},
+		{"C801", calls{"List", "Uint", "Uint"}, io.ErrUnexpectedEOF},
+		{"C8C9", calls{"List", "Kind"}, ErrElemTooLarge},
+		{"C3C2010201", calls{"List", "List", "Uint", "Uint", "ListEnd", "Uint"}, EOL},
+		{"00", calls{"ListEnd"}, errNotInList},
+		{"C40102", calls{"List", "Uint", "ListEnd"}, errNotAtEOL},
+	}
+
+testfor:
+	for i, test := range tests {
+		s := NewStream(bytes.NewReader(unhex(test.string)))
+		rs := reflect.ValueOf(s)
+		for j, call := range test.calls {
+			fval := rs.MethodByName(call)
+			ret := fval.Call(nil)
+			err := "<nil>"
+			if lastret := ret[len(ret)-1].Interface(); lastret != nil {
+				err = lastret.(error).Error()
+			}
+			if j == len(test.calls)-1 {
+				if err != test.error.Error() {
+					t.Errorf("test %d: last call (%s) error mismatch\ngot:  %s\nwant: %v",
+						i, call, err, test.error)
+				}
+			} else if err != "<nil>" {
+				t.Errorf("test %d: call %d (%s) unexpected error: %q", i, j, call, err)
+				continue testfor
+			}
+		}
+	}
+}
+
+func TestStreamList(t *testing.T) {
+	s := NewStream(bytes.NewReader(unhex("C80102030405060708")))
+
+	len, err := s.List()
+	if err != nil {
+		t.Fatalf("List error: %v", err)
+	}
+	if len != 8 {
+		t.Fatalf("List returned invalid length, got %d, want 8", len)
+	}
+
+	for i := uint64(1); i <= 8; i++ {
+		v, err := s.Uint()
+		if err != nil {
+			t.Fatalf("Uint error: %v", err)
+		}
+		if i != v {
+			t.Errorf("Uint returned wrong value, got %d, want %d", v, i)
+		}
+	}
+
+	if _, err := s.Uint(); err != EOL {
+		t.Errorf("Uint error mismatch, got %v, want %v", err, EOL)
+	}
+	if err = s.ListEnd(); err != nil {
+		t.Fatalf("ListEnd error: %v", err)
+	}
+}
+
+func TestDecodeErrors(t *testing.T) {
+	r := bytes.NewReader(nil)
+
+	if err := Decode(r, nil); err != errDecodeIntoNil {
+		t.Errorf("Decode(r, nil) error mismatch, got %q, want %q", err, errDecodeIntoNil)
+	}
+
+	var nilptr *struct{}
+	if err := Decode(r, nilptr); err != errDecodeIntoNil {
+		t.Errorf("Decode(r, nilptr) error mismatch, got %q, want %q", err, errDecodeIntoNil)
+	}
+
+	if err := Decode(r, struct{}{}); err != errNoPointer {
+		t.Errorf("Decode(r, struct{}{}) error mismatch, got %q, want %q", err, errNoPointer)
+	}
+
+	expectErr := "rlp: type chan bool is not RLP-serializable"
+	if err := Decode(r, new(chan bool)); err == nil || err.Error() != expectErr {
+		t.Errorf("Decode(r, new(chan bool)) error mismatch, got %q, want %q", err, expectErr)
+	}
+
+	if err := Decode(r, new(uint)); err != io.EOF {
+		t.Errorf("Decode(r, new(int)) error mismatch, got %q, want %q", err, io.EOF)
+	}
+}
+
+type decodeTest struct {
+	input string
+	ptr   interface{}
+	value interface{}
+	error string
+}
+
+type simplestruct struct {
+	A uint
+	B string
+}
+
+type recstruct struct {
+	I     uint
+	Child *recstruct
+}
+
+var (
+	veryBigInt = big.NewInt(0).Add(
+		big.NewInt(0).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16),
+		big.NewInt(0xFFFF),
+	)
+)
+
+var (
+	sharedByteArray [5]byte
+	sharedPtr       = new(*uint)
+)
+
+var decodeTests = []decodeTest{
+	// integers
+	{input: "05", ptr: new(uint32), value: uint32(5)},
+	{input: "80", ptr: new(uint32), value: uint32(0)},
+	{input: "8105", ptr: new(uint32), value: uint32(5)},
+	{input: "820505", ptr: new(uint32), value: uint32(0x0505)},
+	{input: "83050505", ptr: new(uint32), value: uint32(0x050505)},
+	{input: "8405050505", ptr: new(uint32), value: uint32(0x05050505)},
+	{input: "850505050505", ptr: new(uint32), error: "rlp: input string too long for uint32"},
+	{input: "C0", ptr: new(uint32), error: "rlp: expected input string or byte for uint32"},
+
+	// slices
+	{input: "C0", ptr: new([]uint), value: []uint{}},
+	{input: "C80102030405060708", ptr: new([]uint), value: []uint{1, 2, 3, 4, 5, 6, 7, 8}},
+
+	// arrays
+	{input: "C0", ptr: new([5]uint), value: [5]uint{}},
+	{input: "C50102030405", ptr: new([5]uint), value: [5]uint{1, 2, 3, 4, 5}},
+	{input: "C6010203040506", ptr: new([5]uint), error: "rlp: input list has too many elements for [5]uint"},
+
+	// byte slices
+	{input: "01", ptr: new([]byte), value: []byte{1}},
+	{input: "80", ptr: new([]byte), value: []byte{}},
+	{input: "8D6162636465666768696A6B6C6D", ptr: new([]byte), value: []byte("abcdefghijklm")},
+	{input: "C0", ptr: new([]byte), value: []byte{}},
+	{input: "C3010203", ptr: new([]byte), value: []byte{1, 2, 3}},
+	{input: "C3820102", ptr: new([]byte), error: "rlp: input string too long for uint8"},
+
+	// byte arrays
+	{input: "01", ptr: new([5]byte), value: [5]byte{1}},
+	{input: "80", ptr: new([5]byte), value: [5]byte{}},
+	{input: "850102030405", ptr: new([5]byte), value: [5]byte{1, 2, 3, 4, 5}},
+	{input: "C0", ptr: new([5]byte), value: [5]byte{}},
+	{input: "C3010203", ptr: new([5]byte), value: [5]byte{1, 2, 3, 0, 0}},
+	{input: "C3820102", ptr: new([5]byte), error: "rlp: input string too long for uint8"},
+	{input: "86010203040506", ptr: new([5]byte), error: "rlp: input string too long for [5]uint8"},
+	{input: "850101", ptr: new([5]byte), error: io.ErrUnexpectedEOF.Error()},
+
+	// byte array reuse (should be zeroed)
+	{input: "850102030405", ptr: &sharedByteArray, value: [5]byte{1, 2, 3, 4, 5}},
+	{input: "8101", ptr: &sharedByteArray, value: [5]byte{1}}, // kind: String
+	{input: "850102030405", ptr: &sharedByteArray, value: [5]byte{1, 2, 3, 4, 5}},
+	{input: "01", ptr: &sharedByteArray, value: [5]byte{1}}, // kind: Byte
+	{input: "C3010203", ptr: &sharedByteArray, value: [5]byte{1, 2, 3, 0, 0}},
+	{input: "C101", ptr: &sharedByteArray, value: [5]byte{1}}, // kind: List
+
+	// zero sized byte arrays
+	{input: "80", ptr: new([0]byte), value: [0]byte{}},
+	{input: "C0", ptr: new([0]byte), value: [0]byte{}},
+	{input: "01", ptr: new([0]byte), error: "rlp: input string too long for [0]uint8"},
+	{input: "8101", ptr: new([0]byte), error: "rlp: input string too long for [0]uint8"},
+
+	// strings
+	{input: "00", ptr: new(string), value: "\000"},
+	{input: "8D6162636465666768696A6B6C6D", ptr: new(string), value: "abcdefghijklm"},
+	{input: "C0", ptr: new(string), error: "rlp: expected input string or byte for string"},
+
+	// big ints
+	{input: "01", ptr: new(*big.Int), value: big.NewInt(1)},
+	{input: "89FFFFFFFFFFFFFFFFFF", ptr: new(*big.Int), value: veryBigInt},
+	{input: "10", ptr: new(big.Int), value: *big.NewInt(16)}, // non-pointer also works
+	{input: "C0", ptr: new(*big.Int), error: "rlp: expected input string or byte for *big.Int"},
+
+	// structs
+	{input: "C0", ptr: new(simplestruct), value: simplestruct{0, ""}},
+	{input: "C105", ptr: new(simplestruct), value: simplestruct{5, ""}},
+	{input: "C50583343434", ptr: new(simplestruct), value: simplestruct{5, "444"}},
+	{input: "C3010101", ptr: new(simplestruct), error: "rlp: input list has too many elements for rlp.simplestruct"},
+	{
+		input: "C501C302C103",
+		ptr:   new(recstruct),
+		value: recstruct{1, &recstruct{2, &recstruct{3, nil}}},
+	},
+
+	// pointers
+	{input: "00", ptr: new(*uint), value: (*uint)(nil)},
+	{input: "80", ptr: new(*uint), value: (*uint)(nil)},
+	{input: "C0", ptr: new(*uint), value: (*uint)(nil)},
+	{input: "07", ptr: new(*uint), value: uintp(7)},
+	{input: "8108", ptr: new(*uint), value: uintp(8)},
+	{input: "C109", ptr: new(*[]uint), value: &[]uint{9}},
+	{input: "C58403030303", ptr: new(*[][]byte), value: &[][]byte{{3, 3, 3, 3}}},
+
+	// pointer should be reset to nil
+	{input: "05", ptr: sharedPtr, value: uintp(5)},
+	{input: "80", ptr: sharedPtr, value: (*uint)(nil)},
+
+	// interface{}
+	{input: "00", ptr: new(interface{}), value: []byte{0}},
+	{input: "01", ptr: new(interface{}), value: []byte{1}},
+	{input: "80", ptr: new(interface{}), value: []byte{}},
+	{input: "850505050505", ptr: new(interface{}), value: []byte{5, 5, 5, 5, 5}},
+	{input: "C0", ptr: new(interface{}), value: []interface{}{}},
+	{input: "C50183040404", ptr: new(interface{}), value: []interface{}{[]byte{1}, []byte{4, 4, 4}}},
+}
+
+func uintp(i uint) *uint { return &i }
+
+func runTests(t *testing.T, decode func([]byte, interface{}) error) {
+	for i, test := range decodeTests {
+		input, err := hex.DecodeString(test.input)
+		if err != nil {
+			t.Errorf("test %d: invalid hex input %q", i, test.input)
+			continue
+		}
+		err = decode(input, test.ptr)
+		if err != nil && test.error == "" {
+			t.Errorf("test %d: unexpected Decode error: %v\ndecoding into %T\ninput %q",
+				i, err, test.ptr, test.input)
+			continue
+		}
+		if test.error != "" && fmt.Sprint(err) != test.error {
+			t.Errorf("test %d: Decode error mismatch\ngot  %v\nwant %v\ndecoding into %T\ninput %q",
+				i, err, test.error, test.ptr, test.input)
+			continue
+		}
+		deref := reflect.ValueOf(test.ptr).Elem().Interface()
+		if err == nil && !reflect.DeepEqual(deref, test.value) {
+			t.Errorf("test %d: value mismatch\ngot  %#v\nwant %#v\ndecoding into %T\ninput %q",
+				i, deref, test.value, test.ptr, test.input)
+		}
+	}
+}
+
+func TestDecodeWithByteReader(t *testing.T) {
+	runTests(t, func(input []byte, into interface{}) error {
+		return Decode(bytes.NewReader(input), into)
+	})
+}
+
+// dumbReader reads from a byte slice but does not
+// implement ReadByte.
+type dumbReader []byte
+
+func (r *dumbReader) Read(buf []byte) (n int, err error) {
+	if len(*r) == 0 {
+		return 0, io.EOF
+	}
+	n = copy(buf, *r)
+	*r = (*r)[n:]
+	return n, nil
+}
+
+func TestDecodeWithNonByteReader(t *testing.T) {
+	runTests(t, func(input []byte, into interface{}) error {
+		r := dumbReader(input)
+		return Decode(&r, into)
+	})
+}
+
+func TestDecodeStreamReset(t *testing.T) {
+	s := NewStream(nil)
+	runTests(t, func(input []byte, into interface{}) error {
+		s.Reset(bytes.NewReader(input))
+		return s.Decode(into)
+	})
+}
+
+type testDecoder struct{ called bool }
+
+func (t *testDecoder) DecodeRLP(s *Stream) error {
+	if _, err := s.Uint(); err != nil {
+		return err
+	}
+	t.called = true
+	return nil
+}
+
+func TestDecodeDecoder(t *testing.T) {
+	var s struct {
+		T1 testDecoder
+		T2 *testDecoder
+		T3 **testDecoder
+	}
+	if err := Decode(bytes.NewReader(unhex("C3010203")), &s); err != nil {
+		t.Fatalf("Decode error: %v", err)
+	}
+
+	if !s.T1.called {
+		t.Errorf("DecodeRLP was not called for (non-pointer) testDecoder")
+	}
+
+	if s.T2 == nil {
+		t.Errorf("*testDecoder has not been allocated")
+	} else if !s.T2.called {
+		t.Errorf("DecodeRLP was not called for *testDecoder")
+	}
+
+	if s.T3 == nil || *s.T3 == nil {
+		t.Errorf("**testDecoder has not been allocated")
+	} else if !(*s.T3).called {
+		t.Errorf("DecodeRLP was not called for **testDecoder")
+	}
+}
+
+type byteDecoder byte
+
+func (bd *byteDecoder) DecodeRLP(s *Stream) error {
+	_, err := s.Uint()
+	*bd = 255
+	return err
+}
+
+func (bd byteDecoder) called() bool {
+	return bd == 255
+}
+
+// This test verifies that the byte slice/byte array logic
+// does not kick in for element types implementing Decoder.
+func TestDecoderInByteSlice(t *testing.T) {
+	var slice []byteDecoder
+	if err := Decode(bytes.NewReader(unhex("C101")), &slice); err != nil {
+		t.Errorf("unexpected Decode error %v", err)
+	} else if !slice[0].called() {
+		t.Errorf("DecodeRLP not called for slice element")
+	}
+
+	var array [1]byteDecoder
+	if err := Decode(bytes.NewReader(unhex("C101")), &array); err != nil {
+		t.Errorf("unexpected Decode error %v", err)
+	} else if !array[0].called() {
+		t.Errorf("DecodeRLP not called for array element")
+	}
+}
+
+func ExampleDecode() {
+	input, _ := hex.DecodeString("C90A1486666F6F626172")
+
+	type example struct {
+		A, B    uint
+		private uint // private fields are ignored
+		String  string
+	}
+
+	var s example
+	err := Decode(bytes.NewReader(input), &s)
+	if err != nil {
+		fmt.Printf("Error: %v\n", err)
+	} else {
+		fmt.Printf("Decoded value: %#v\n", s)
+	}
+	// Output:
+	// Decoded value: rlp.example{A:0xa, B:0x14, private:0x0, String:"foobar"}
+}
+
+func ExampleStream() {
+	input, _ := hex.DecodeString("C90A1486666F6F626172")
+	s := NewStream(bytes.NewReader(input))
+
+	// Check what kind of value lies ahead
+	kind, size, _ := s.Kind()
+	fmt.Printf("Kind: %v size:%d\n", kind, size)
+
+	// Enter the list
+	if _, err := s.List(); err != nil {
+		fmt.Printf("List error: %v\n", err)
+		return
+	}
+
+	// Decode elements
+	fmt.Println(s.Uint())
+	fmt.Println(s.Uint())
+	fmt.Println(s.Bytes())
+
+	// Acknowledge end of list
+	if err := s.ListEnd(); err != nil {
+		fmt.Printf("ListEnd error: %v\n", err)
+	}
+	// Output:
+	// Kind: List size:9
+	// 10 <nil>
+	// 20 <nil>
+	// [102 111 111 98 97 114] <nil>
+}
+
+func BenchmarkDecode(b *testing.B) {
+	enc := encTest(90000)
+	b.SetBytes(int64(len(enc)))
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	for i := 0; i < b.N; i++ {
+		var s []int
+		r := bytes.NewReader(enc)
+		if err := Decode(r, &s); err != nil {
+			b.Fatalf("Decode error: %v", err)
+		}
+	}
+}
+
+func BenchmarkDecodeIntSliceReuse(b *testing.B) {
+	enc := encTest(100000)
+	b.SetBytes(int64(len(enc)))
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	var s []int
+	for i := 0; i < b.N; i++ {
+		r := bytes.NewReader(enc)
+		if err := Decode(r, &s); err != nil {
+			b.Fatalf("Decode error: %v", err)
+		}
+	}
+}
+
+func encTest(n int) []byte {
+	s := make([]interface{}, n)
+	for i := 0; i < n; i++ {
+		s[i] = i
+	}
+	return ethutil.Encode(s)
+}
+
+func unhex(str string) []byte {
+	b, err := hex.DecodeString(str)
+	if err != nil {
+		panic(fmt.Sprintf("invalid hex string: %q", str))
+	}
+	return b
+}
diff --git a/rlp/doc.go b/rlp/doc.go
new file mode 100644
index 0000000000000000000000000000000000000000..aab98ea43ac639a553cfbb635240e70daacba643
--- /dev/null
+++ b/rlp/doc.go
@@ -0,0 +1,17 @@
+/*
+Package rlp implements the RLP serialization format.
+
+The purpose of RLP (Recursive Linear Prefix) qis to encode arbitrarily
+nested arrays of binary data, and RLP is the main encoding method used
+to serialize objects in Ethereum. The only purpose of RLP is to encode
+structure; encoding specific atomic data types (eg. strings, ints,
+floats) is left up to higher-order protocols; in Ethereum integers
+must be represented in big endian binary form with no leading zeroes
+(thus making the integer value zero be equivalent to the empty byte
+array).
+
+RLP values are distinguished by a type tag. The type tag precedes the
+value in the input stream and defines the size and kind of the bytes
+that follow.
+*/
+package rlp
diff --git a/rlp/typecache.go b/rlp/typecache.go
new file mode 100644
index 0000000000000000000000000000000000000000..52e68a3c537b2b4f7ee2e68f4c83293fe235ebd0
--- /dev/null
+++ b/rlp/typecache.go
@@ -0,0 +1,62 @@
+package rlp
+
+import (
+	"reflect"
+	"sync"
+)
+
+type decoder func(*Stream, reflect.Value) error
+
+type typeinfo struct {
+	decoder
+}
+
+var (
+	typeCacheMutex sync.RWMutex
+	typeCache      = make(map[reflect.Type]*typeinfo)
+)
+
+func cachedTypeInfo(typ reflect.Type) (*typeinfo, error) {
+	typeCacheMutex.RLock()
+	info := typeCache[typ]
+	typeCacheMutex.RUnlock()
+	if info != nil {
+		return info, nil
+	}
+	// not in the cache, need to generate info for this type.
+	typeCacheMutex.Lock()
+	defer typeCacheMutex.Unlock()
+	return cachedTypeInfo1(typ)
+}
+
+func cachedTypeInfo1(typ reflect.Type) (*typeinfo, error) {
+	info := typeCache[typ]
+	if info != nil {
+		// another goroutine got the write lock first
+		return info, nil
+	}
+	// put a dummmy value into the cache before generating.
+	// if the generator tries to lookup itself, it will get
+	// the dummy value and won't call itself recursively.
+	typeCache[typ] = new(typeinfo)
+	info, err := genTypeInfo(typ)
+	if err != nil {
+		// remove the dummy value if the generator fails
+		delete(typeCache, typ)
+		return nil, err
+	}
+	*typeCache[typ] = *info
+	return typeCache[typ], err
+}
+
+func genTypeInfo(typ reflect.Type) (info *typeinfo, err error) {
+	info = new(typeinfo)
+	if info.decoder, err = makeDecoder(typ); err != nil {
+		return nil, err
+	}
+	return info, nil
+}
+
+func isUint(k reflect.Kind) bool {
+	return k >= reflect.Uint && k <= reflect.Uintptr
+}
diff --git a/rpc/json.go b/rpc/json.go
new file mode 100644
index 0000000000000000000000000000000000000000..e467f9a342ae1ca1b8d5a9e067a625e7f17040d1
--- /dev/null
+++ b/rpc/json.go
@@ -0,0 +1,20 @@
+package rpc
+
+import (
+	"encoding/json"
+	"io"
+)
+
+type jsonWrapper struct{}
+
+func (self jsonWrapper) Send(writer io.Writer, v interface{}) (n int, err error) {
+	var payload []byte
+	payload, err = json.Marshal(v)
+	if err != nil {
+		return 0, err
+	}
+
+	return writer.Write(payload)
+}
+
+var JSON jsonWrapper
diff --git a/rpc/message.go b/rpc/message.go
new file mode 100644
index 0000000000000000000000000000000000000000..c8103eded624ece98bce1d1b07065cd22732bf98
--- /dev/null
+++ b/rpc/message.go
@@ -0,0 +1,14 @@
+package rpc
+
+import "github.com/ethereum/go-ethereum/ethutil"
+
+type Message struct {
+	Call string        `json:"call"`
+	Args []interface{} `json:"args"`
+	Id   int           `json:"_id"`
+	Data interface{}   `json:"data"`
+}
+
+func (self *Message) Arguments() *ethutil.Value {
+	return ethutil.NewValue(self.Args)
+}
diff --git a/rpc/packages.go b/rpc/packages.go
new file mode 100644
index 0000000000000000000000000000000000000000..5535e6e79db09eebd026c5884f93e7a1ff197de1
--- /dev/null
+++ b/rpc/packages.go
@@ -0,0 +1,311 @@
+package rpc
+
+import (
+	"encoding/json"
+	"errors"
+	"math/big"
+	"strings"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/xeth"
+)
+
+type EthereumApi struct {
+	pipe *xeth.JSXEth
+}
+
+type JsonArgs interface {
+	requirements() error
+}
+
+type BlockResponse struct {
+	JsonResponse
+}
+type GetBlockArgs struct {
+	BlockNumber int
+	Hash        string
+}
+
+type ErrorResponse struct {
+	Error     bool   `json:"error"`
+	ErrorText string `json:"errorText"`
+}
+
+type JsonResponse interface {
+}
+
+type SuccessRes struct {
+	Error  bool         `json:"error"`
+	Result JsonResponse `json:"result"`
+}
+
+func NewSuccessRes(object JsonResponse) string {
+	e := SuccessRes{Error: false, Result: object}
+	res, err := json.Marshal(e)
+	if err != nil {
+		// This should never happen
+		panic("Creating json error response failed, help")
+	}
+	success := string(res)
+	return success
+}
+
+func NewErrorResponse(msg string) error {
+	e := ErrorResponse{Error: true, ErrorText: msg}
+	res, err := json.Marshal(e)
+	if err != nil {
+		// This should never happen
+		panic("Creating json error response failed, help")
+	}
+	newErr := errors.New(string(res))
+	return newErr
+}
+
+func (b *GetBlockArgs) requirements() error {
+	if b.BlockNumber == 0 && b.Hash == "" {
+		return NewErrorResponse("GetBlock requires either a block 'number' or a block 'hash' as argument")
+	}
+	return nil
+}
+
+func (p *EthereumApi) GetBlock(args *GetBlockArgs, reply *string) error {
+	err := args.requirements()
+	if err != nil {
+		return err
+	}
+
+	block := p.pipe.BlockByHash(args.Hash)
+	*reply = NewSuccessRes(block)
+	return nil
+}
+
+type NewTxArgs struct {
+	Sec       string
+	Recipient string
+	Value     string
+	Gas       string
+	GasPrice  string
+	Init      string
+	Body      string
+}
+type TxResponse struct {
+	Hash string
+}
+
+func (a *NewTxArgs) requirements() error {
+	if a.Recipient == "" {
+		return NewErrorResponse("Transact requires a 'recipient' address as argument")
+	}
+	if a.Value == "" {
+		return NewErrorResponse("Transact requires a 'value' as argument")
+	}
+	if a.Gas == "" {
+		return NewErrorResponse("Transact requires a 'gas' value as argument")
+	}
+	if a.GasPrice == "" {
+		return NewErrorResponse("Transact requires a 'gasprice' value as argument")
+	}
+	return nil
+}
+
+func (a *NewTxArgs) requirementsContract() error {
+	if a.Value == "" {
+		return NewErrorResponse("Create requires a 'value' as argument")
+	}
+	if a.Gas == "" {
+		return NewErrorResponse("Create requires a 'gas' value as argument")
+	}
+	if a.GasPrice == "" {
+		return NewErrorResponse("Create requires a 'gasprice' value as argument")
+	}
+	if a.Body == "" {
+		return NewErrorResponse("Create requires a 'body' value as argument")
+	}
+	return nil
+}
+
+func (p *EthereumApi) Transact(args *NewTxArgs, reply *string) error {
+	err := args.requirements()
+	if err != nil {
+		return err
+	}
+	result, _ := p.pipe.Transact(p.pipe.Key().PrivateKey, args.Recipient, args.Value, args.Gas, args.GasPrice, args.Body)
+	*reply = NewSuccessRes(result)
+	return nil
+}
+
+func (p *EthereumApi) Create(args *NewTxArgs, reply *string) error {
+	err := args.requirementsContract()
+	if err != nil {
+		return err
+	}
+
+	result, _ := p.pipe.Transact(p.pipe.Key().PrivateKey, "", args.Value, args.Gas, args.GasPrice, args.Body)
+	*reply = NewSuccessRes(result)
+	return nil
+}
+
+type PushTxArgs struct {
+	Tx string
+}
+
+func (a *PushTxArgs) requirementsPushTx() error {
+	if a.Tx == "" {
+		return NewErrorResponse("PushTx requires a 'tx' as argument")
+	}
+	return nil
+}
+
+func (p *EthereumApi) PushTx(args *PushTxArgs, reply *string) error {
+	err := args.requirementsPushTx()
+	if err != nil {
+		return err
+	}
+	result, _ := p.pipe.PushTx(args.Tx)
+	*reply = NewSuccessRes(result)
+	return nil
+}
+
+func (p *EthereumApi) GetKey(args interface{}, reply *string) error {
+	*reply = NewSuccessRes(p.pipe.Key())
+	return nil
+}
+
+type GetStorageArgs struct {
+	Address string
+	Key     string
+}
+
+func (a *GetStorageArgs) requirements() error {
+	if a.Address == "" {
+		return NewErrorResponse("GetStorageAt requires an 'address' value as argument")
+	}
+	if a.Key == "" {
+		return NewErrorResponse("GetStorageAt requires an 'key' value as argument")
+	}
+	return nil
+}
+
+type GetStorageAtRes struct {
+	Key     string `json:"key"`
+	Value   string `json:"value"`
+	Address string `json:"address"`
+}
+
+func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *string) error {
+	err := args.requirements()
+	if err != nil {
+		return err
+	}
+
+	state := p.pipe.World().SafeGet(ethutil.Hex2Bytes(args.Address))
+
+	var hx string
+	if strings.Index(args.Key, "0x") == 0 {
+		hx = string([]byte(args.Key)[2:])
+	} else {
+		// Convert the incoming string (which is a bigint) into hex
+		i, _ := new(big.Int).SetString(args.Key, 10)
+		hx = ethutil.Bytes2Hex(i.Bytes())
+	}
+	jsonlogger.Debugf("GetStorageAt(%s, %s)\n", args.Address, hx)
+	value := state.Storage(ethutil.Hex2Bytes(hx))
+	*reply = NewSuccessRes(GetStorageAtRes{Address: args.Address, Key: args.Key, Value: value.Str()})
+	return nil
+}
+
+type GetTxCountArgs struct {
+	Address string `json:"address"`
+}
+type GetTxCountRes struct {
+	Nonce int `json:"nonce"`
+}
+
+func (a *GetTxCountArgs) requirements() error {
+	if a.Address == "" {
+		return NewErrorResponse("GetTxCountAt requires an 'address' value as argument")
+	}
+	return nil
+}
+
+type GetPeerCountRes struct {
+	PeerCount int `json:"peerCount"`
+}
+
+func (p *EthereumApi) GetPeerCount(args *interface{}, reply *string) error {
+	*reply = NewSuccessRes(GetPeerCountRes{PeerCount: p.pipe.PeerCount()})
+	return nil
+}
+
+type GetListeningRes struct {
+	IsListening bool `json:"isListening"`
+}
+
+func (p *EthereumApi) GetIsListening(args *interface{}, reply *string) error {
+	*reply = NewSuccessRes(GetListeningRes{IsListening: p.pipe.IsListening()})
+	return nil
+}
+
+type GetCoinbaseRes struct {
+	Coinbase string `json:"coinbase"`
+}
+
+func (p *EthereumApi) GetCoinbase(args *interface{}, reply *string) error {
+	*reply = NewSuccessRes(GetCoinbaseRes{Coinbase: p.pipe.CoinBase()})
+	return nil
+}
+
+type GetMiningRes struct {
+	IsMining bool `json:"isMining"`
+}
+
+func (p *EthereumApi) GetIsMining(args *interface{}, reply *string) error {
+	*reply = NewSuccessRes(GetMiningRes{IsMining: p.pipe.IsMining()})
+	return nil
+}
+
+func (p *EthereumApi) GetTxCountAt(args *GetTxCountArgs, reply *string) error {
+	err := args.requirements()
+	if err != nil {
+		return err
+	}
+	state := p.pipe.TxCountAt(args.Address)
+	*reply = NewSuccessRes(GetTxCountRes{Nonce: state})
+	return nil
+}
+
+type GetBalanceArgs struct {
+	Address string
+}
+
+func (a *GetBalanceArgs) requirements() error {
+	if a.Address == "" {
+		return NewErrorResponse("GetBalanceAt requires an 'address' value as argument")
+	}
+	return nil
+}
+
+type BalanceRes struct {
+	Balance string `json:"balance"`
+	Address string `json:"address"`
+}
+
+func (p *EthereumApi) GetBalanceAt(args *GetBalanceArgs, reply *string) error {
+	err := args.requirements()
+	if err != nil {
+		return err
+	}
+	state := p.pipe.World().SafeGet(ethutil.Hex2Bytes(args.Address))
+	*reply = NewSuccessRes(BalanceRes{Balance: state.Balance().String(), Address: args.Address})
+	return nil
+}
+
+type TestRes struct {
+	JsonResponse `json:"-"`
+	Answer       int `json:"answer"`
+}
+
+func (p *EthereumApi) Test(args *GetBlockArgs, reply *string) error {
+	*reply = NewSuccessRes(TestRes{Answer: 15})
+	return nil
+}
diff --git a/rpc/server.go b/rpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..983dc6c331411a1f6fad296babc84d55985fa3b1
--- /dev/null
+++ b/rpc/server.go
@@ -0,0 +1,67 @@
+package rpc
+
+import (
+	"fmt"
+	"net"
+	"net/rpc"
+	"net/rpc/jsonrpc"
+
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/xeth"
+)
+
+var jsonlogger = logger.NewLogger("JSON")
+
+type JsonRpcServer struct {
+	quit     chan bool
+	listener net.Listener
+	pipe     *xeth.JSXEth
+}
+
+func (s *JsonRpcServer) exitHandler() {
+out:
+	for {
+		select {
+		case <-s.quit:
+			s.listener.Close()
+			break out
+		}
+	}
+
+	jsonlogger.Infoln("Shutdown JSON-RPC server")
+}
+
+func (s *JsonRpcServer) Stop() {
+	close(s.quit)
+}
+
+func (s *JsonRpcServer) Start() {
+	jsonlogger.Infoln("Starting JSON-RPC server")
+	go s.exitHandler()
+	rpc.Register(&EthereumApi{pipe: s.pipe})
+	rpc.HandleHTTP()
+
+	for {
+		conn, err := s.listener.Accept()
+		if err != nil {
+			jsonlogger.Infoln("Error starting JSON-RPC:", err)
+			break
+		}
+		jsonlogger.Debugln("Incoming request.")
+		go jsonrpc.ServeConn(conn)
+	}
+}
+
+func NewJsonRpcServer(pipe *xeth.JSXEth, port int) (*JsonRpcServer, error) {
+	sport := fmt.Sprintf(":%d", port)
+	l, err := net.Listen("tcp", sport)
+	if err != nil {
+		return nil, err
+	}
+
+	return &JsonRpcServer{
+		listener: l,
+		quit:     make(chan bool),
+		pipe:     pipe,
+	}, nil
+}
diff --git a/rpc/writer.go b/rpc/writer.go
new file mode 100644
index 0000000000000000000000000000000000000000..4cc39f577053a8d7bab71349ef200ad73fe4b16b
--- /dev/null
+++ b/rpc/writer.go
@@ -0,0 +1,75 @@
+package rpc
+
+/*
+func pack(id int, v ...interface{}) Message {
+	return Message{Data: v, Id: id}
+}
+
+func WriteOn(msg *Message, writer io.Writer) {
+	//msg := &Message{Seed: seed, Data: data}
+
+	switch msg.Call {
+	case "compile":
+		data := ethutil.NewValue(msg.Args)
+		bcode, err := ethutil.Compile(data.Get(0).Str(), false)
+		if err != nil {
+			JSON.Send(writer, pack(msg.Id, err.Error()))
+		}
+
+		code := ethutil.Bytes2Hex(bcode)
+
+		JSON.Send(writer, pack(msg.Id, code, nil))
+	case "block":
+		args := msg.Arguments()
+
+		block := pipe.BlockByNumber(int32(args.Get(0).Uint()))
+
+		JSON.Send(writer, pack(msg.Id, block))
+	case "transact":
+		if mp, ok := msg.Args[0].(map[string]interface{}); ok {
+			object := mapToTxParams(mp)
+			JSON.Send(
+				writer,
+				pack(msg.Id, args(pipe.Transact(object["from"], object["to"], object["value"], object["gas"], object["gasPrice"], object["data"]))),
+			)
+
+		}
+	case "coinbase":
+		JSON.Send(writer, pack(msg.Id, pipe.CoinBase(), msg.Seed))
+
+	case "listening":
+		JSON.Send(writer, pack(msg.Id, pipe.IsListening()))
+
+	case "mining":
+		JSON.Send(writer, pack(msg.Id, pipe.IsMining()))
+
+	case "peerCoint":
+		JSON.Send(writer, pack(msg.Id, pipe.PeerCount()))
+
+	case "countAt":
+		args := msg.Arguments()
+
+		JSON.Send(writer, pack(msg.Id, pipe.TxCountAt(args.Get(0).Str())))
+
+	case "codeAt":
+		args := msg.Arguments()
+
+		JSON.Send(writer, pack(msg.Id, len(pipe.CodeAt(args.Get(0).Str()))))
+
+	case "stateAt":
+		args := msg.Arguments()
+
+		JSON.Send(writer, pack(msg.Id, pipe.StorageAt(args.Get(0).Str(), args.Get(1).Str())))
+
+	case "balanceAt":
+		args := msg.Arguments()
+
+		JSON.Send(writer, pack(msg.Id, pipe.BalanceAt(args.Get(0).Str())))
+
+	case "newFilter":
+	case "newFilterString":
+	case "messages":
+		// TODO
+	}
+}
+*/
diff --git a/state/dump.go b/state/dump.go
new file mode 100644
index 0000000000000000000000000000000000000000..c1f5ecf3a0e1dfb7c02d23f1f5d85a59079bd53e
--- /dev/null
+++ b/state/dump.go
@@ -0,0 +1,56 @@
+package state
+
+import (
+	"encoding/json"
+	"fmt"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type Account struct {
+	Balance  string            `json:"balance"`
+	Nonce    uint64            `json:"nonce"`
+	Root     string            `json:"root"`
+	CodeHash string            `json:"codeHash"`
+	Storage  map[string]string `json:"storage"`
+}
+
+type World struct {
+	Root     string             `json:"root"`
+	Accounts map[string]Account `json:"accounts"`
+}
+
+func (self *StateDB) Dump() []byte {
+	world := World{
+		Root:     ethutil.Bytes2Hex(self.Trie.GetRoot()),
+		Accounts: make(map[string]Account),
+	}
+
+	self.Trie.NewIterator().Each(func(key string, value *ethutil.Value) {
+		stateObject := NewStateObjectFromBytes([]byte(key), value.Bytes())
+
+		account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.Nonce, Root: ethutil.Bytes2Hex(stateObject.Root()), CodeHash: ethutil.Bytes2Hex(stateObject.codeHash)}
+		account.Storage = make(map[string]string)
+
+		stateObject.EachStorage(func(key string, value *ethutil.Value) {
+			value.Decode()
+			account.Storage[ethutil.Bytes2Hex([]byte(key))] = ethutil.Bytes2Hex(value.Bytes())
+		})
+		world.Accounts[ethutil.Bytes2Hex([]byte(key))] = account
+	})
+
+	json, err := json.MarshalIndent(world, "", "    ")
+	if err != nil {
+		fmt.Println("dump err", err)
+	}
+
+	return json
+}
+
+// Debug stuff
+func (self *StateObject) CreateOutputForDiff() {
+	fmt.Printf("%x %x %x %x\n", self.Address(), self.State.Root(), self.balance.Bytes(), self.Nonce)
+	self.EachStorage(func(addr string, value *ethutil.Value) {
+		fmt.Printf("%x %x\n", addr, value.Bytes())
+	})
+}
diff --git a/state/errors.go b/state/errors.go
new file mode 100644
index 0000000000000000000000000000000000000000..5a847d38b261d5eee8891fdec78d813a73c63e76
--- /dev/null
+++ b/state/errors.go
@@ -0,0 +1,23 @@
+package state
+
+import (
+	"fmt"
+	"math/big"
+)
+
+type GasLimitErr struct {
+	Message string
+	Is, Max *big.Int
+}
+
+func IsGasLimitErr(err error) bool {
+	_, ok := err.(*GasLimitErr)
+
+	return ok
+}
+func (err *GasLimitErr) Error() string {
+	return err.Message
+}
+func GasLimitError(is, max *big.Int) *GasLimitErr {
+	return &GasLimitErr{Message: fmt.Sprintf("GasLimit error. Max %s, transaction would take it to %s", max, is), Is: is, Max: max}
+}
diff --git a/state/log.go b/state/log.go
new file mode 100644
index 0000000000000000000000000000000000000000..46360f4aae28208ccd95abdb18baf9de8471d95a
--- /dev/null
+++ b/state/log.go
@@ -0,0 +1,78 @@
+package state
+
+import (
+	"fmt"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type Log interface {
+	ethutil.RlpEncodable
+
+	Address() []byte
+	Topics() [][]byte
+	Data() []byte
+}
+
+type StateLog struct {
+	address []byte
+	topics  [][]byte
+	data    []byte
+}
+
+func NewLog(address []byte, topics [][]byte, data []byte) *StateLog {
+	return &StateLog{address, topics, data}
+}
+
+func (self *StateLog) Address() []byte {
+	return self.address
+}
+
+func (self *StateLog) Topics() [][]byte {
+	return self.topics
+}
+
+func (self *StateLog) Data() []byte {
+	return self.data
+}
+
+func NewLogFromValue(decoder *ethutil.Value) *StateLog {
+	log := &StateLog{
+		address: decoder.Get(0).Bytes(),
+		data:    decoder.Get(2).Bytes(),
+	}
+
+	it := decoder.Get(1).NewIterator()
+	for it.Next() {
+		log.topics = append(log.topics, it.Value().Bytes())
+	}
+
+	return log
+}
+
+func (self *StateLog) RlpData() interface{} {
+	return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data}
+}
+
+func (self *StateLog) String() string {
+	return fmt.Sprintf(`log: %x %x %x`, self.address, self.topics, self.data)
+}
+
+type Logs []Log
+
+func (self Logs) RlpData() interface{} {
+	data := make([]interface{}, len(self))
+	for i, log := range self {
+		data[i] = log.RlpData()
+	}
+
+	return data
+}
+
+func (self Logs) String() (ret string) {
+	for _, log := range self {
+		ret += fmt.Sprintf("%v", log)
+	}
+
+	return "[" + ret + "]"
+}
diff --git a/state/main_test.go b/state/main_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..f3d3f7e2313e23634e624e1bbbbe4d0bf751f807
--- /dev/null
+++ b/state/main_test.go
@@ -0,0 +1,9 @@
+package state
+
+import (
+	"testing"
+
+	checker "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { checker.TestingT(t) }
diff --git a/state/manifest.go b/state/manifest.go
new file mode 100644
index 0000000000000000000000000000000000000000..21cd04a1a9d8f05f528ac4690519f652423f2e55
--- /dev/null
+++ b/state/manifest.go
@@ -0,0 +1,55 @@
+package state
+
+import (
+	"fmt"
+	"math/big"
+)
+
+// Object manifest
+//
+// The object manifest is used to keep changes to the state so we can keep track of the changes
+// that occurred during a state transitioning phase.
+type Manifest struct {
+	Messages Messages
+}
+
+func NewManifest() *Manifest {
+	m := &Manifest{}
+	m.Reset()
+
+	return m
+}
+
+func (m *Manifest) Reset() {
+	m.Messages = nil
+}
+
+func (self *Manifest) AddMessage(msg *Message) *Message {
+	self.Messages = append(self.Messages, msg)
+
+	return msg
+}
+
+type Messages []*Message
+type Message struct {
+	To, From  []byte
+	Input     []byte
+	Output    []byte
+	Path      int
+	Origin    []byte
+	Timestamp int64
+	Coinbase  []byte
+	Block     []byte
+	Number    *big.Int
+	Value     *big.Int
+
+	ChangedAddresses [][]byte
+}
+
+func (self *Message) AddStorageChange(addr []byte) {
+	self.ChangedAddresses = append(self.ChangedAddresses, addr)
+}
+
+func (self *Message) String() string {
+	return fmt.Sprintf("Message{to: %x from: %x input: %x output: %x origin: %x coinbase: %x block: %x number: %v timestamp: %d path: %d value: %v", self.To, self.From, self.Input, self.Output, self.Origin, self.Coinbase, self.Block, self.Number, self.Timestamp, self.Path, self.Value)
+}
diff --git a/state/state.go b/state/state.go
new file mode 100644
index 0000000000000000000000000000000000000000..f77da72f077ba4d6dfb47a27b3b6e8aec7671046
--- /dev/null
+++ b/state/state.go
@@ -0,0 +1,325 @@
+package state
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+var statelogger = logger.NewLogger("STATE")
+
+// StateDBs within the ethereum protocol are used to store anything
+// within the merkle trie. StateDBs take care of caching and storing
+// nested states. It's the general query interface to retrieve:
+// * Contracts
+// * Accounts
+type StateDB struct {
+	// The trie for this structure
+	Trie *trie.Trie
+
+	stateObjects map[string]*StateObject
+
+	manifest *Manifest
+
+	refund map[string]*big.Int
+
+	logs Logs
+}
+
+// Create a new state from a given trie
+func New(trie *trie.Trie) *StateDB {
+	return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string]*big.Int)}
+}
+
+func (self *StateDB) EmptyLogs() {
+	self.logs = nil
+}
+
+func (self *StateDB) AddLog(log Log) {
+	self.logs = append(self.logs, log)
+}
+
+func (self *StateDB) Logs() Logs {
+	return self.logs
+}
+
+// Retrieve the balance from the given address or 0 if object not found
+func (self *StateDB) GetBalance(addr []byte) *big.Int {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		return stateObject.balance
+	}
+
+	return ethutil.Big0
+}
+
+func (self *StateDB) Refund(addr []byte, gas *big.Int) {
+	if self.refund[string(addr)] == nil {
+		self.refund[string(addr)] = new(big.Int)
+	}
+	self.refund[string(addr)].Add(self.refund[string(addr)], gas)
+}
+
+func (self *StateDB) AddBalance(addr []byte, amount *big.Int) {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		stateObject.AddBalance(amount)
+	}
+}
+
+func (self *StateDB) GetNonce(addr []byte) uint64 {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		return stateObject.Nonce
+	}
+
+	return 0
+}
+
+func (self *StateDB) SetNonce(addr []byte, nonce uint64) {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		stateObject.Nonce = nonce
+	}
+}
+
+func (self *StateDB) GetCode(addr []byte) []byte {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		return stateObject.Code
+	}
+
+	return nil
+}
+
+func (self *StateDB) SetCode(addr, code []byte) {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		stateObject.SetCode(code)
+	}
+}
+
+func (self *StateDB) GetState(a, b []byte) []byte {
+	stateObject := self.GetStateObject(a)
+	if stateObject != nil {
+		return stateObject.GetState(b).Bytes()
+	}
+
+	return nil
+}
+
+func (self *StateDB) SetState(addr, key []byte, value interface{}) {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		stateObject.SetState(key, ethutil.NewValue(value))
+	}
+}
+
+func (self *StateDB) Delete(addr []byte) bool {
+	stateObject := self.GetStateObject(addr)
+	if stateObject != nil {
+		stateObject.MarkForDeletion()
+
+		return true
+	}
+
+	return false
+}
+
+//
+// Setting, updating & deleting state object methods
+//
+
+// Update the given state object and apply it to state trie
+func (self *StateDB) UpdateStateObject(stateObject *StateObject) {
+	addr := stateObject.Address()
+
+	if len(stateObject.CodeHash()) > 0 {
+		ethutil.Config.Db.Put(stateObject.CodeHash(), stateObject.Code)
+	}
+
+	self.Trie.Update(string(addr), string(stateObject.RlpEncode()))
+}
+
+// Delete the given state object and delete it from the state trie
+func (self *StateDB) DeleteStateObject(stateObject *StateObject) {
+	self.Trie.Delete(string(stateObject.Address()))
+
+	delete(self.stateObjects, string(stateObject.Address()))
+}
+
+// Retrieve a state object given my the address. Nil if not found
+func (self *StateDB) GetStateObject(addr []byte) *StateObject {
+	addr = ethutil.Address(addr)
+
+	stateObject := self.stateObjects[string(addr)]
+	if stateObject != nil {
+		return stateObject
+	}
+
+	data := self.Trie.Get(string(addr))
+	if len(data) == 0 {
+		return nil
+	}
+
+	stateObject = NewStateObjectFromBytes(addr, []byte(data))
+	self.SetStateObject(stateObject)
+
+	return stateObject
+}
+
+func (self *StateDB) SetStateObject(object *StateObject) {
+	self.stateObjects[string(object.address)] = object
+}
+
+// Retrieve a state object or create a new state object if nil
+func (self *StateDB) GetOrNewStateObject(addr []byte) *StateObject {
+	stateObject := self.GetStateObject(addr)
+	if stateObject == nil {
+		stateObject = self.NewStateObject(addr)
+	}
+
+	return stateObject
+}
+
+// Create a state object whether it exist in the trie or not
+func (self *StateDB) NewStateObject(addr []byte) *StateObject {
+	addr = ethutil.Address(addr)
+
+	statelogger.Debugf("(+) %x\n", addr)
+
+	stateObject := NewStateObject(addr)
+	self.stateObjects[string(addr)] = stateObject
+
+	return stateObject
+}
+
+// Deprecated
+func (self *StateDB) GetAccount(addr []byte) *StateObject {
+	return self.GetOrNewStateObject(addr)
+}
+
+//
+// Setting, copying of the state methods
+//
+
+func (s *StateDB) Cmp(other *StateDB) bool {
+	return s.Trie.Cmp(other.Trie)
+}
+
+func (self *StateDB) Copy() *StateDB {
+	if self.Trie != nil {
+		state := New(self.Trie.Copy())
+		for k, stateObject := range self.stateObjects {
+			state.stateObjects[k] = stateObject.Copy()
+		}
+
+		for addr, refund := range self.refund {
+			state.refund[addr] = new(big.Int).Set(refund)
+		}
+
+		logs := make(Logs, len(self.logs))
+		copy(logs, self.logs)
+		state.logs = logs
+
+		return state
+	}
+
+	return nil
+}
+
+func (self *StateDB) Set(state *StateDB) {
+	if state == nil {
+		panic("Tried setting 'state' to nil through 'Set'")
+	}
+
+	self.Trie = state.Trie
+	self.stateObjects = state.stateObjects
+	self.refund = state.refund
+	self.logs = state.logs
+}
+
+func (s *StateDB) Root() []byte {
+	return s.Trie.GetRoot()
+}
+
+// Resets the trie and all siblings
+func (s *StateDB) Reset() {
+	s.Trie.Undo()
+
+	// Reset all nested states
+	for _, stateObject := range s.stateObjects {
+		if stateObject.State == nil {
+			continue
+		}
+
+		stateObject.Reset()
+	}
+
+	s.Empty()
+}
+
+// Syncs the trie and all siblings
+func (s *StateDB) Sync() {
+	// Sync all nested states
+	for _, stateObject := range s.stateObjects {
+		if stateObject.State == nil {
+			continue
+		}
+
+		stateObject.State.Sync()
+	}
+
+	s.Trie.Sync()
+
+	s.Empty()
+}
+
+func (self *StateDB) Empty() {
+	self.stateObjects = make(map[string]*StateObject)
+	self.refund = make(map[string]*big.Int)
+}
+
+func (self *StateDB) Refunds() map[string]*big.Int {
+	return self.refund
+}
+
+func (self *StateDB) Update(gasUsed *big.Int) {
+	var deleted bool
+
+	self.refund = make(map[string]*big.Int)
+
+	for _, stateObject := range self.stateObjects {
+		if stateObject.remove {
+			self.DeleteStateObject(stateObject)
+			deleted = true
+		} else {
+			stateObject.Sync()
+
+			self.UpdateStateObject(stateObject)
+		}
+	}
+
+	// FIXME trie delete is broken
+	if deleted {
+		valid, t2 := trie.ParanoiaCheck(self.Trie)
+		if !valid {
+			statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.GetRoot(), t2.GetRoot())
+
+			self.Trie = t2
+		}
+	}
+}
+
+func (self *StateDB) Manifest() *Manifest {
+	return self.manifest
+}
+
+// Debug stuff
+func (self *StateDB) CreateOutputForDiff() {
+	for _, stateObject := range self.stateObjects {
+		stateObject.CreateOutputForDiff()
+	}
+}
diff --git a/state/state_object.go b/state/state_object.go
new file mode 100644
index 0000000000000000000000000000000000000000..b8af4e702a914a42c2f80edf99b30833e5b1a55e
--- /dev/null
+++ b/state/state_object.go
@@ -0,0 +1,320 @@
+package state
+
+import (
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type Code []byte
+
+func (self Code) String() string {
+	return string(self) //strings.Join(Disassemble(self), " ")
+}
+
+type Storage map[string]*ethutil.Value
+
+func (self Storage) Copy() Storage {
+	cpy := make(Storage)
+	for key, value := range self {
+		// XXX Do we need a 'value' copy or is this sufficient?
+		cpy[key] = value
+	}
+
+	return cpy
+}
+
+type StateObject struct {
+	// Address of the object
+	address []byte
+	// Shared attributes
+	balance  *big.Int
+	codeHash []byte
+	Nonce    uint64
+	// Contract related attributes
+	State    *StateDB
+	Code     Code
+	InitCode Code
+
+	storage Storage
+
+	// Total gas pool is the total amount of gas currently
+	// left if this object is the coinbase. Gas is directly
+	// purchased of the coinbase.
+	gasPool *big.Int
+
+	// Mark for deletion
+	// When an object is marked for deletion it will be delete from the trie
+	// during the "update" phase of the state transition
+	remove bool
+}
+
+func (self *StateObject) Reset() {
+	self.storage = make(Storage)
+	self.State.Reset()
+}
+
+func NewStateObject(addr []byte) *StateObject {
+	// This to ensure that it has 20 bytes (and not 0 bytes), thus left or right pad doesn't matter.
+	address := ethutil.Address(addr)
+
+	object := &StateObject{address: address, balance: new(big.Int), gasPool: new(big.Int)}
+	object.State = New(trie.New(ethutil.Config.Db, ""))
+	object.storage = make(Storage)
+	object.gasPool = new(big.Int)
+
+	return object
+}
+
+func NewContract(address []byte, balance *big.Int, root []byte) *StateObject {
+	contract := NewStateObject(address)
+	contract.balance = balance
+	contract.State = New(trie.New(ethutil.Config.Db, string(root)))
+
+	return contract
+}
+
+func NewStateObjectFromBytes(address, data []byte) *StateObject {
+	object := &StateObject{address: address}
+	object.RlpDecode(data)
+
+	return object
+}
+
+func (self *StateObject) MarkForDeletion() {
+	self.remove = true
+	statelogger.DebugDetailf("%x: #%d %v (deletion)\n", self.Address(), self.Nonce, self.balance)
+}
+
+func (c *StateObject) GetAddr(addr []byte) *ethutil.Value {
+	return ethutil.NewValueFromBytes([]byte(c.State.Trie.Get(string(addr))))
+}
+
+func (c *StateObject) SetAddr(addr []byte, value interface{}) {
+	c.State.Trie.Update(string(addr), string(ethutil.NewValue(value).Encode()))
+}
+
+func (self *StateObject) GetStorage(key *big.Int) *ethutil.Value {
+	return self.GetState(key.Bytes())
+}
+func (self *StateObject) SetStorage(key *big.Int, value *ethutil.Value) {
+	self.SetState(key.Bytes(), value)
+}
+
+func (self *StateObject) Storage() map[string]*ethutil.Value {
+	return self.storage
+}
+
+func (self *StateObject) GetState(k []byte) *ethutil.Value {
+	key := ethutil.LeftPadBytes(k, 32)
+
+	value := self.storage[string(key)]
+	if value == nil {
+		value = self.GetAddr(key)
+
+		if !value.IsNil() {
+			self.storage[string(key)] = value
+		}
+	}
+
+	return value
+}
+
+func (self *StateObject) SetState(k []byte, value *ethutil.Value) {
+	key := ethutil.LeftPadBytes(k, 32)
+	self.storage[string(key)] = value.Copy()
+}
+
+// Iterate over each storage address and yield callback
+func (self *StateObject) EachStorage(cb trie.EachCallback) {
+	// First loop over the uncommit/cached values in storage
+	for key, value := range self.storage {
+		// XXX Most iterators Fns as it stands require encoded values
+		encoded := ethutil.NewValue(value.Encode())
+		cb(key, encoded)
+	}
+
+	it := self.State.Trie.NewIterator()
+	it.Each(func(key string, value *ethutil.Value) {
+		// If it's cached don't call the callback.
+		if self.storage[key] == nil {
+			cb(key, value)
+		}
+	})
+}
+
+func (self *StateObject) Sync() {
+	for key, value := range self.storage {
+		if value.Len() == 0 {
+			self.State.Trie.Delete(string(key))
+			continue
+		}
+
+		self.SetAddr([]byte(key), value)
+	}
+
+	valid, t2 := trie.ParanoiaCheck(self.State.Trie)
+	if !valid {
+		statelogger.Infof("Warn: PARANOIA: Different state storage root during copy %x vs %x\n", self.State.Root(), t2.GetRoot())
+
+		self.State.Trie = t2
+	}
+}
+
+func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
+	if int64(len(c.Code)-1) < pc.Int64() {
+		return ethutil.NewValue(0)
+	}
+
+	return ethutil.NewValueFromBytes([]byte{c.Code[pc.Int64()]})
+}
+
+func (c *StateObject) AddBalance(amount *big.Int) {
+	c.SetBalance(new(big.Int).Add(c.balance, amount))
+
+	statelogger.Debugf("%x: #%d %v (+ %v)\n", c.Address(), c.Nonce, c.balance, amount)
+}
+func (c *StateObject) AddAmount(amount *big.Int) { c.AddBalance(amount) }
+
+func (c *StateObject) SubBalance(amount *big.Int) {
+	c.SetBalance(new(big.Int).Sub(c.balance, amount))
+
+	statelogger.Debugf("%x: #%d %v (- %v)\n", c.Address(), c.Nonce, c.balance, amount)
+}
+func (c *StateObject) SubAmount(amount *big.Int) { c.SubBalance(amount) }
+
+func (c *StateObject) SetBalance(amount *big.Int) {
+	c.balance = amount
+}
+
+func (self *StateObject) Balance() *big.Int { return self.balance }
+
+//
+// Gas setters and getters
+//
+
+// Return the gas back to the origin. Used by the Virtual machine or Closures
+func (c *StateObject) ReturnGas(gas, price *big.Int) {}
+func (c *StateObject) ConvertGas(gas, price *big.Int) error {
+	total := new(big.Int).Mul(gas, price)
+	if total.Cmp(c.balance) > 0 {
+		return fmt.Errorf("insufficient amount: %v, %v", c.balance, total)
+	}
+
+	c.SubAmount(total)
+
+	return nil
+}
+
+func (self *StateObject) SetGasPool(gasLimit *big.Int) {
+	self.gasPool = new(big.Int).Set(gasLimit)
+
+	statelogger.Debugf("%x: gas (+ %v)", self.Address(), self.gasPool)
+}
+
+func (self *StateObject) BuyGas(gas, price *big.Int) error {
+	if self.gasPool.Cmp(gas) < 0 {
+		return GasLimitError(self.gasPool, gas)
+	}
+
+	rGas := new(big.Int).Set(gas)
+	rGas.Mul(rGas, price)
+
+	self.AddAmount(rGas)
+
+	return nil
+}
+
+func (self *StateObject) RefundGas(gas, price *big.Int) {
+	self.gasPool.Add(self.gasPool, gas)
+
+	rGas := new(big.Int).Set(gas)
+	rGas.Mul(rGas, price)
+
+	self.balance.Sub(self.balance, rGas)
+}
+
+func (self *StateObject) Copy() *StateObject {
+	stateObject := NewStateObject(self.Address())
+	stateObject.balance.Set(self.balance)
+	stateObject.codeHash = ethutil.CopyBytes(self.codeHash)
+	stateObject.Nonce = self.Nonce
+	if self.State != nil {
+		stateObject.State = self.State.Copy()
+	}
+	stateObject.Code = ethutil.CopyBytes(self.Code)
+	stateObject.InitCode = ethutil.CopyBytes(self.InitCode)
+	stateObject.storage = self.storage.Copy()
+	stateObject.gasPool.Set(self.gasPool)
+	stateObject.remove = self.remove
+
+	return stateObject
+}
+
+func (self *StateObject) Set(stateObject *StateObject) {
+	*self = *stateObject
+}
+
+//
+// Attribute accessors
+//
+
+func (c *StateObject) N() *big.Int {
+	return big.NewInt(int64(c.Nonce))
+}
+
+// Returns the address of the contract/account
+func (c *StateObject) Address() []byte {
+	return c.address
+}
+
+// Returns the initialization Code
+func (c *StateObject) Init() Code {
+	return c.InitCode
+}
+
+func (self *StateObject) Root() []byte {
+	return self.State.Trie.GetRoot()
+}
+
+func (self *StateObject) SetCode(code []byte) {
+	self.Code = code
+}
+
+//
+// Encoding
+//
+
+// State object encoding methods
+func (c *StateObject) RlpEncode() []byte {
+	return ethutil.Encode([]interface{}{c.Nonce, c.balance, c.Root(), c.CodeHash()})
+}
+
+func (c *StateObject) CodeHash() ethutil.Bytes {
+	return crypto.Sha3(c.Code)
+}
+
+func (c *StateObject) RlpDecode(data []byte) {
+	decoder := ethutil.NewValueFromBytes(data)
+
+	c.Nonce = decoder.Get(0).Uint()
+	c.balance = decoder.Get(1).BigInt()
+	c.State = New(trie.New(ethutil.Config.Db, decoder.Get(2).Interface()))
+	c.storage = make(map[string]*ethutil.Value)
+	c.gasPool = new(big.Int)
+
+	c.codeHash = decoder.Get(3).Bytes()
+
+	c.Code, _ = ethutil.Config.Db.Get(c.codeHash)
+}
+
+// Storage change object. Used by the manifest for notifying changes to
+// the sub channels.
+type StorageState struct {
+	StateAddress []byte
+	Address      []byte
+	Value        *big.Int
+}
diff --git a/state/state_test.go b/state/state_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..28e4fc5da19a6c66bfdb31d0626e520d999cc0bd
--- /dev/null
+++ b/state/state_test.go
@@ -0,0 +1,61 @@
+package state
+
+import (
+	checker "gopkg.in/check.v1"
+
+	"github.com/ethereum/go-ethereum/ethdb"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/trie"
+)
+
+type StateSuite struct {
+	state *StateDB
+}
+
+var _ = checker.Suite(&StateSuite{})
+
+// var ZeroHash256 = make([]byte, 32)
+
+func (s *StateSuite) TestDump(c *checker.C) {
+	key := []byte{0x01}
+	value := "foo"
+	node := []interface{}{key, value}
+	s.state.Trie.Put(node)
+	dump := s.state.Dump()
+	c.Assert(dump, checker.NotNil)
+}
+
+func (s *StateSuite) SetUpTest(c *checker.C) {
+	db, _ := ethdb.NewMemDatabase()
+	ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "")
+	ethutil.Config.Db = db
+	s.state = New(trie.New(db, ""))
+}
+
+func (s *StateSuite) TestSnapshot(c *checker.C) {
+	stateobjaddr := []byte("aa")
+	storageaddr := ethutil.Big("0")
+	data1 := ethutil.NewValue(42)
+	data2 := ethutil.NewValue(43)
+
+	// get state object
+	stateObject := s.state.GetOrNewStateObject(stateobjaddr)
+	// set inital state object value
+	stateObject.SetStorage(storageaddr, data1)
+	// get snapshot of current state
+	snapshot := s.state.Copy()
+
+	// get state object. is this strictly necessary?
+	stateObject = s.state.GetStateObject(stateobjaddr)
+	// set new state object value
+	stateObject.SetStorage(storageaddr, data2)
+	// restore snapshot
+	s.state.Set(snapshot)
+
+	// get state object
+	stateObject = s.state.GetStateObject(stateobjaddr)
+	// get state storage value
+	res := stateObject.GetStorage(storageaddr)
+
+	c.Assert(data1, checker.DeepEquals, res)
+}
diff --git a/tests/files/BasicTests/blockgenesistest.json b/tests/files/BasicTests/blockgenesistest.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ad5590f11a42d619f80939643a50590cc42a04e
--- /dev/null
+++ b/tests/files/BasicTests/blockgenesistest.json
@@ -0,0 +1,20 @@
+[
+    {
+        "inputs": {
+        },
+        "result": "f892f88ea00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479400000000000000000000000000000000000000008080834000008087038d7ea4c68000830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0"
+    },
+    {
+        "inputs": {
+            "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": 100000000000000000000
+        },
+        "result": "f8b2f8aea00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05e5b074eca68ed6f5cf3ef14712b7c97f431a41deff21e3f211cf687f618026780834000008087038d7ea4c68000830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0"
+    },
+    {
+        "inputs": {
+            "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": 99000000000000000000,
+            "13978aee95f38490e9769c39b2773ed763d9cd5f": 1000000000000000000
+        },
+        "result": "f8b2f8aea00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b1062e564d1bdb302a2feae46e837fef59c4f8a408967009dcc48327d80d8fff80834000008087038d7ea4c68000830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0"
+    }
+]
diff --git a/tests/files/BasicTests/genesishashestest.json b/tests/files/BasicTests/genesishashestest.json
new file mode 100644
index 0000000000000000000000000000000000000000..ba733e36ef4d8c92838c4f1ad603e470a271b27e
--- /dev/null
+++ b/tests/files/BasicTests/genesishashestest.json
@@ -0,0 +1,15 @@
+{
+    "genesis_rlp_hex": "f9012ef90129a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c67c70f5d7d3049337d1dcc0503a249881120019a8e7322774dbfe57b463718ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0",
+    "genesis_state_root": "c67c70f5d7d3049337d1dcc0503a249881120019a8e7322774dbfe57b463718c",
+    "initial_alloc": {
+        "51ba59315b3a95761d0863b05ccc7a7f54703d99": "1606938044258990275541962092341162602522202993782792835301376",
+        "e4157b34ea9615cfbde6b4fda419828124b70c78": "1606938044258990275541962092341162602522202993782792835301376",
+        "b9c015918bdaba24b4ff057a92a3873d6eb201be": "1606938044258990275541962092341162602522202993782792835301376",
+        "6c386a4b26f73c802f34673f7248bb118f97424a": "1606938044258990275541962092341162602522202993782792835301376",
+        "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": "1606938044258990275541962092341162602522202993782792835301376",
+        "2ef47100e0787b915105fd5e3f4ff6752079d5cb": "1606938044258990275541962092341162602522202993782792835301376",
+        "e6716f9544a56c530d868e4bfbacb172315bdead": "1606938044258990275541962092341162602522202993782792835301376",
+        "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": "1606938044258990275541962092341162602522202993782792835301376"
+    },
+    "genesis_hash": "779b1b620b03c0fb24963e183d5e88e3dbe4484e3f6e2aa05942e3be7b48e179"
+}
diff --git a/tests/files/BasicTests/hexencodetest.json b/tests/files/BasicTests/hexencodetest.json
new file mode 100644
index 0000000000000000000000000000000000000000..26c5bc7ed37fbc5b591b511366525be2e373b37b
--- /dev/null
+++ b/tests/files/BasicTests/hexencodetest.json
@@ -0,0 +1,62 @@
+{
+	"zz,odd,open": {
+		"seq": [ 0, 0, 1, 2, 3, 4, 5 ],
+		"term": false,
+		"out": "10012345"
+	},
+	"z,even,open": {
+	  "seq": [ 0, 1, 2, 3, 4, 5 ],
+	  "term": false,
+	  "out": "00012345"
+	},
+	"nz,odd,open": {
+		"seq": [ 1, 2, 3, 4, 5 ],
+		"term": false,
+		"out": "112345"
+	},
+	"zz,even,open": {
+		"seq": [ 0, 0, 1, 2, 3, 4 ],
+		"term": false,
+		"out": "00001234"
+	},
+	"z,odd,open": {
+	  "seq": [ 0, 1, 2, 3, 4 ],
+	  "term": false,
+	  "out": "101234"
+	},
+	"nz,even,open": {
+		"seq": [ 1, 2, 3, 4 ],
+		"term": false,
+		"out": "001234"
+	},
+	"zz,odd,term": {
+		"seq": [ 0, 0, 1, 2, 3, 4, 5 ],
+		"term": true,
+		"out": "30012345"
+	},
+	"z,even,term": {
+	  "seq": [ 0, 1, 2, 3, 4, 5 ],
+	  "term": true,
+	  "out": "20012345"
+	},
+	"nz,odd,term": {
+		"seq": [ 1, 2, 3, 4, 5 ],
+		"term": true,
+		"out": "312345"
+	},
+	"zz,even,term": {
+		"seq": [ 0, 0, 1, 2, 3, 4 ],
+		"term": true,
+		"out": "20001234"
+	},
+	"z,odd,term": {
+	  "seq": [ 0, 1, 2, 3, 4 ],
+	  "term": true,
+	  "out": "301234"
+	},
+	"nz,even,term": {
+		"seq": [ 1, 2, 3, 4 ],
+		"term": true,
+		"out": "201234"
+	}
+}
diff --git a/tests/files/BasicTests/keyaddrtest.json b/tests/files/BasicTests/keyaddrtest.json
new file mode 100644
index 0000000000000000000000000000000000000000..c65b2ae33bd24cca7d2dc60c57b3d03bbe01d989
--- /dev/null
+++ b/tests/files/BasicTests/keyaddrtest.json
@@ -0,0 +1,22 @@
+[
+    {
+        "seed": "cow",
+        "key": "c85ef7d79691fe79573b1a7064c19c1a9819ebdbd1faaab1a8ec92344438aaf4",
+        "addr": "cd2a3d9f938e13cd947ec05abc7fe734df8dd826",
+        "sig_of_emptystring": {
+            "v": "27",
+            "r": "55022946425863772466282515086640833500580355555249003729267710149987842051473",
+            "s": "3021698389129950584349170550428805649435913935175976180112863059249983907949"
+        }
+    },
+    {
+        "seed": "horse",
+        "key": "c87f65ff3f271bf5dc8643484f66b200109caffe4bf98c4cb393dc35740b28c0",
+        "addr": "13978aee95f38490e9769c39b2773ed763d9cd5f",
+        "sig_of_emptystring": {
+            "v": "28",
+            "r": "20570452350081260599473412372903969148670549754219103025003129053348571714359",
+            "s": "76892551129780267788164835941580941601518827936179476514262023835864819088004"
+        }
+    }
+]
diff --git a/tests/files/BasicTests/rlptest.json b/tests/files/BasicTests/rlptest.json
new file mode 100644
index 0000000000000000000000000000000000000000..19adbb8e22f3719e8a74f0e9eccb3d0d868ece56
--- /dev/null
+++ b/tests/files/BasicTests/rlptest.json
@@ -0,0 +1,146 @@
+{
+	"emptystring": {
+		"in": "", 
+		"out": "80"
+	},
+	"shortstring": {
+		"in": "dog", 
+		"out": "83646f67"
+    },
+	"shortstring2": {
+		"in": "Lorem ipsum dolor sit amet, consectetur adipisicing eli", 
+		"out": "b74c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e7365637465747572206164697069736963696e6720656c69"
+	},
+	"longstring": {
+		"in": "Lorem ipsum dolor sit amet, consectetur adipisicing elit", 
+		"out": "b8384c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e7365637465747572206164697069736963696e6720656c6974"
+	},
+	"longstring2": {
+	"in": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur mauris magna, suscipit sed vehicula non, iaculis faucibus tortor. Proin suscipit ultricies malesuada. Duis tortor elit, dictum quis tristique eu, ultrices at risus. Morbi a est imperdiet mi ullamcorper aliquet suscipit nec lorem. Aenean quis leo mollis, vulputate elit varius, consequat enim. Nulla ultrices turpis justo, et posuere urna consectetur nec. Proin non convallis metus. Donec tempor ipsum in mauris congue sollicitudin. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse convallis sem vel massa faucibus, eget lacinia lacus tempor. Nulla quis ultricies purus. Proin auctor rhoncus nibh condimentum mollis. Aliquam consequat enim at metus luctus, a eleifend purus egestas. Curabitur at nibh metus. Nam bibendum, neque at auctor tristique, lorem libero aliquet arcu, non interdum tellus lectus sit amet eros. Cras rhoncus, metus ac ornare cursus, dolor justo ultrices metus, at ullamcorper volutpat", 
+		"out": "b904004c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20437572616269747572206d6175726973206d61676e612c20737573636970697420736564207665686963756c61206e6f6e2c20696163756c697320666175636962757320746f72746f722e2050726f696e20737573636970697420756c74726963696573206d616c6573756164612e204475697320746f72746f7220656c69742c2064696374756d2071756973207472697374697175652065752c20756c7472696365732061742072697375732e204d6f72626920612065737420696d70657264696574206d6920756c6c616d636f7270657220616c6971756574207375736369706974206e6563206c6f72656d2e2041656e65616e2071756973206c656f206d6f6c6c69732c2076756c70757461746520656c6974207661726975732c20636f6e73657175617420656e696d2e204e756c6c6120756c74726963657320747572706973206a7573746f2c20657420706f73756572652075726e6120636f6e7365637465747572206e65632e2050726f696e206e6f6e20636f6e76616c6c6973206d657475732e20446f6e65632074656d706f7220697073756d20696e206d617572697320636f6e67756520736f6c6c696369747564696e2e20566573746962756c756d20616e746520697073756d207072696d697320696e206661756369627573206f726369206c756374757320657420756c74726963657320706f737565726520637562696c69612043757261653b2053757370656e646973736520636f6e76616c6c69732073656d2076656c206d617373612066617563696275732c2065676574206c6163696e6961206c616375732074656d706f722e204e756c6c61207175697320756c747269636965732070757275732e2050726f696e20617563746f722072686f6e637573206e69626820636f6e64696d656e74756d206d6f6c6c69732e20416c697175616d20636f6e73657175617420656e696d206174206d65747573206c75637475732c206120656c656966656e6420707572757320656765737461732e20437572616269747572206174206e696268206d657475732e204e616d20626962656e64756d2c206e6571756520617420617563746f72207472697374697175652c206c6f72656d206c696265726f20616c697175657420617263752c206e6f6e20696e74657264756d2074656c6c7573206c65637475732073697420616d65742065726f732e20437261732072686f6e6375732c206d65747573206163206f726e617265206375727375732c20646f6c6f72206a7573746f20756c747269636573206d657475732c20617420756c6c616d636f7270657220766f6c7574706174"
+	},
+	"zero": {
+		"in": 0, 
+		"out": "80"
+	},
+	"smallint": {
+		"in": 1, 
+		"out": "01"
+	},
+	"smallint2": {
+		"in": 16, 
+		"out": "10"
+	},
+	"smallint3": {
+		"in": 79, 
+		"out": "4f"
+	},
+	"smallint4": {
+		"in": 127, 
+		"out": "7f"
+	},
+	"mediumint1": {
+		"in": 128, 
+		"out": "8180"
+	},
+	"mediumint2": {
+		"in": 1000, 
+		"out": "8203e8"
+	},
+	"mediumint3": {
+		"in": 100000, 
+		"out": "830186a0"
+	},
+	"mediumint4": {
+		"in": "#83729609699884896815286331701780722", 
+		"out": "8F102030405060708090A0B0C0D0E0F2"
+	},
+	"mediumint5": {
+		"in": "#105315505618206987246253880190783558935785933862974822347068935681",
+		"out": "9C0100020003000400050006000700080009000A000B000C000D000E01"
+	},
+	"emptylist": {
+		"in": [], 
+		"out": "c0"
+	},
+	"stringlist": {
+		"in": [ "dog", "god", "cat" ],
+		"out": "cc83646f6783676f6483636174"
+	},
+	"multilist": {
+		"in": [ "zw", [ 4 ], 1 ], 
+		"out": "c6827a77c10401"
+	},
+	"shortListMax1": {
+		"in": [ "asdf", "qwer", "zxcv", "asdf","qwer", "zxcv", "asdf", "qwer", "zxcv", "asdf", "qwer"],
+		"out": "F784617364668471776572847a78637684617364668471776572847a78637684617364668471776572847a78637684617364668471776572"
+	},
+	"longList1" : { 
+		"in" : [
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"]
+		], 
+		"out": "F840CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376"
+	},
+	"longList2" : { 
+		"in" : [
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"],
+			["asdf","qwer","zxcv"]
+		], 
+		"out": "F90200CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376CF84617364668471776572847a786376"
+	},
+
+	"listsoflists": {
+		"in": [ [ [], [] ], [] ], 
+		"out": "c4c2c0c0c0"
+	},
+	"listsoflists2": {
+		"in": [ [], [[]], [ [], [[]] ] ], 
+		"out": "c7c0c1c0c3c0c1c0"
+	},
+	"dictTest1" : { 
+		"in" : [ 
+			["key1", "val1"], 
+			["key2", "val2"], 
+			["key3", "val3"],
+			["key4", "val4"]
+		],
+		"out" : "ECCA846b6579318476616c31CA846b6579328476616c32CA846b6579338476616c33CA846b6579348476616c34"
+	},
+	"bigint": {
+		"in": "#115792089237316195423570985008687907853269984665640564039457584007913129639936",
+		"out": "a1010000000000000000000000000000000000000000000000000000000000000000"
+	}
+}
diff --git a/tests/files/BasicTests/txtest.json b/tests/files/BasicTests/txtest.json
new file mode 100644
index 0000000000000000000000000000000000000000..1261d07660203830c7766ca9573605fcff331728
--- /dev/null
+++ b/tests/files/BasicTests/txtest.json
@@ -0,0 +1,24 @@
+[
+    {
+        "key": "c85ef7d79691fe79573b1a7064c19c1a9819ebdbd1faaab1a8ec92344438aaf4",
+        "nonce": 0,
+        "gasprice": 1000000000000,
+        "startgas": 10000,
+        "to": "13978aee95f38490e9769c39b2773ed763d9cd5f",
+        "value": 10000000000000000,
+        "data": "",
+        "unsigned": "eb8085e8d4a510008227109413978aee95f38490e9769c39b2773ed763d9cd5f872386f26fc1000080808080",
+        "signed": "f86b8085e8d4a510008227109413978aee95f38490e9769c39b2773ed763d9cd5f872386f26fc10000801ba0eab47c1a49bf2fe5d40e01d313900e19ca485867d462fe06e139e3a536c6d4f4a014a569d327dcda4b29f74f93c0e9729d2f49ad726e703f9cd90dbb0fbf6649f1"
+    },
+    {
+        "key": "c87f65ff3f271bf5dc8643484f66b200109caffe4bf98c4cb393dc35740b28c0",
+        "nonce": 0,
+        "gasprice": 1000000000000,
+        "startgas": 10000,
+        "to": "",
+        "value": 0,
+        "data": "6025515b525b600a37f260003556601b596020356000355760015b525b54602052f260255860005b525b54602052f2",
+        "unsigned": "f83f8085e8d4a510008227108080af6025515b525b600a37f260003556601b596020356000355760015b525b54602052f260255860005b525b54602052f2808080",
+        "signed": "f87f8085e8d4a510008227108080af6025515b525b600a37f260003556601b596020356000355760015b525b54602052f260255860005b525b54602052f21ba05afed0244d0da90b67cf8979b0f246432a5112c0d31e8d5eedd2bc17b171c694a0bb1035c834677c2e1185b8dc90ca6d1fa585ab3d7ef23707e1a497a98e752d1b"
+    }
+]
diff --git a/tests/files/README.md b/tests/files/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0f7dbe5a6b4055363bc19b9d9a47c82b3ca62e16
--- /dev/null
+++ b/tests/files/README.md
@@ -0,0 +1,26 @@
+tests
+=====
+
+Common tests for all clients to test against.
+
+All files should be of the form:
+
+```
+{
+	"test1name":
+	{
+		"test1property1": ...,
+		"test1property2": ...,
+		...
+	},
+	"test2name":
+	{
+		"test2property1": ...,
+		"test2property2": ...,
+		...
+	}
+}
+```
+
+Arrays are allowed, but don't use them for sets of properties - only use them for data that is clearly a continuous contiguous sequence of values.
+
diff --git a/tests/files/StateTests/stExample.json b/tests/files/StateTests/stExample.json
new file mode 100644
index 0000000000000000000000000000000000000000..34bb4dd8e19d1ef8573745143037506fc798d75b
--- /dev/null
+++ b/tests/files/StateTests/stExample.json
@@ -0,0 +1,64 @@
+{
+    "add11" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x6001600101600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "804",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899196",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600101600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stInitCodeTest.json b/tests/files/StateTests/stInitCodeTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..67aa42853be58d67539062d728863e9f15c4344e
--- /dev/null
+++ b/tests/files/StateTests/stInitCodeTest.json
@@ -0,0 +1,870 @@
+{
+    "CallRecursiveContract" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "04110d816c380812a427968ece99b1c963dfbce6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x04110d816c380812a427968ece99b1c963dfbce6"
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1",
+                "code" : "0x3060025560206000600039602060006000f0",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87"
+                }
+            },
+            "0a517d755cebbf66312b30fff713666a9cb917e0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x0a517d755cebbf66312b30fff713666a9cb917e0"
+                }
+            },
+            "24dd378f51adc67a50e339e8031fe9bd4aafab36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x24dd378f51adc67a50e339e8031fe9bd4aafab36"
+                }
+            },
+            "293f982d000532a7861ab122bdc4bbfd26bf9030" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x293f982d000532a7861ab122bdc4bbfd26bf9030"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x2cf5732f017b0cf1b1f13a1478e10239716bf6b5"
+                }
+            },
+            "31c640b92c21a1f1465c91070b4b3b4d6854195f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "37f998764813b136ddf5a754f34063fd03065e36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x37f998764813b136ddf5a754f34063fd03065e36"
+                }
+            },
+            "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x37fa399a749c121f8a15ce77e3d9f9bec8020d7a"
+                }
+            },
+            "4f36659fa632310b6ec438dea4085b522a2dd077" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x4f36659fa632310b6ec438dea4085b522a2dd077"
+                }
+            },
+            "62c01474f089b07dae603491675dc5b5748f7049" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x62c01474f089b07dae603491675dc5b5748f7049"
+                }
+            },
+            "729af7294be595a0efd7d891c9e51f89c07950c7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x729af7294be595a0efd7d891c9e51f89c07950c7"
+                }
+            },
+            "83e3e5a16d3b696a0314b30b2534804dd5e11197" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x83e3e5a16d3b696a0314b30b2534804dd5e11197"
+                }
+            },
+            "8703df2417e0d7c59d063caa9583cb10a4d20532" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x8703df2417e0d7c59d063caa9583cb10a4d20532"
+                }
+            },
+            "8dffcd74e5b5923512916c6a64b502689cfa65e1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x8dffcd74e5b5923512916c6a64b502689cfa65e1"
+                }
+            },
+            "95a4d7cccb5204733874fa87285a176fe1e9e240" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x95a4d7cccb5204733874fa87285a176fe1e9e240"
+                }
+            },
+            "99b2fcba8120bedd048fe79f5262a6690ed38c39" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x99b2fcba8120bedd048fe79f5262a6690ed38c39"
+                }
+            },
+            "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xa4202b8b8afd5354e3e40a219bdc17f6001bf2cf"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "89999",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a9647f4a0a14042d91dc33c0328030a7157c93ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xa9647f4a0a14042d91dc33c0328030a7157c93ae"
+                }
+            },
+            "aa6cffe5185732689c18f37a7f86170cb7304c2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xaa6cffe5185732689c18f37a7f86170cb7304c2a"
+                }
+            },
+            "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xaae4a2e3c51c04606dcb3723456e58f3ed214f45"
+                }
+            },
+            "c37a43e940dfb5baf581a0b82b351d48305fc885" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xc37a43e940dfb5baf581a0b82b351d48305fc885"
+                }
+            },
+            "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xd2571607e241ecf590ed94b12d87c94babe36db6"
+                }
+            },
+            "f735071cbee190d76b704ce68384fc21e389fbe7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xf735071cbee190d76b704ce68384fc21e389fbe7"
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "0",
+                "code" : "0x3060025560206000600039602060006000f0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x00",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "1"
+        }
+    },
+    "CallTheContractToCreateContractWithInitCode" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "04110d816c380812a427968ece99b1c963dfbce6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x04110d816c380812a427968ece99b1c963dfbce6"
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "10001",
+                "code" : "0x3060025560206000600039602060006000f0",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87"
+                }
+            },
+            "0a517d755cebbf66312b30fff713666a9cb917e0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x0a517d755cebbf66312b30fff713666a9cb917e0"
+                }
+            },
+            "24dd378f51adc67a50e339e8031fe9bd4aafab36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x24dd378f51adc67a50e339e8031fe9bd4aafab36"
+                }
+            },
+            "293f982d000532a7861ab122bdc4bbfd26bf9030" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x293f982d000532a7861ab122bdc4bbfd26bf9030"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x2cf5732f017b0cf1b1f13a1478e10239716bf6b5"
+                }
+            },
+            "31c640b92c21a1f1465c91070b4b3b4d6854195f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "37f998764813b136ddf5a754f34063fd03065e36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x37f998764813b136ddf5a754f34063fd03065e36"
+                }
+            },
+            "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x37fa399a749c121f8a15ce77e3d9f9bec8020d7a"
+                }
+            },
+            "4f36659fa632310b6ec438dea4085b522a2dd077" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x4f36659fa632310b6ec438dea4085b522a2dd077"
+                }
+            },
+            "62c01474f089b07dae603491675dc5b5748f7049" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x62c01474f089b07dae603491675dc5b5748f7049"
+                }
+            },
+            "729af7294be595a0efd7d891c9e51f89c07950c7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x729af7294be595a0efd7d891c9e51f89c07950c7"
+                }
+            },
+            "83e3e5a16d3b696a0314b30b2534804dd5e11197" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x83e3e5a16d3b696a0314b30b2534804dd5e11197"
+                }
+            },
+            "8703df2417e0d7c59d063caa9583cb10a4d20532" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x8703df2417e0d7c59d063caa9583cb10a4d20532"
+                }
+            },
+            "8dffcd74e5b5923512916c6a64b502689cfa65e1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x8dffcd74e5b5923512916c6a64b502689cfa65e1"
+                }
+            },
+            "95a4d7cccb5204733874fa87285a176fe1e9e240" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x95a4d7cccb5204733874fa87285a176fe1e9e240"
+                }
+            },
+            "99b2fcba8120bedd048fe79f5262a6690ed38c39" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0x99b2fcba8120bedd048fe79f5262a6690ed38c39"
+                }
+            },
+            "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xa4202b8b8afd5354e3e40a219bdc17f6001bf2cf"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "89999",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a9647f4a0a14042d91dc33c0328030a7157c93ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xa9647f4a0a14042d91dc33c0328030a7157c93ae"
+                }
+            },
+            "aa6cffe5185732689c18f37a7f86170cb7304c2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xaa6cffe5185732689c18f37a7f86170cb7304c2a"
+                }
+            },
+            "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xaae4a2e3c51c04606dcb3723456e58f3ed214f45"
+                }
+            },
+            "c37a43e940dfb5baf581a0b82b351d48305fc885" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xc37a43e940dfb5baf581a0b82b351d48305fc885"
+                }
+            },
+            "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xd2571607e241ecf590ed94b12d87c94babe36db6"
+                }
+            },
+            "f735071cbee190d76b704ce68384fc21e389fbe7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                    "0x02" : "0xf735071cbee190d76b704ce68384fc21e389fbe7"
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "10000",
+                "code" : "0x3060025560206000600039602060006000f0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x00",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "1"
+        }
+    },
+    "CallTheContractToCreateEmptyContract" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1",
+                "code" : "0x602060006000f0",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "605",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "99394",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "0",
+                "code" : "0x602060006000f0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x00",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "1"
+        }
+    },
+    "NotEnoughCashContractCreation" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "2",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "2",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c6000396000f200600160008035811a8100",
+            "gasLimit" : "599",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    },
+    "OutOfGasContractCreation" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1770",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "8229",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c6000396000f200600160008035811a8100",
+            "gasLimit" : "590",
+            "gasPrice" : "3",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    },
+    "TransactionContractCreation" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "599",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "99400",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c6000396000f200600160008035811a8100",
+            "gasLimit" : "599",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    },
+    "TransactionCreateSuicideContract" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "8999",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c6000396000f200ff600160008035811a81",
+            "gasLimit" : "1000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    },
+    "TransactionStopInitCode" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "599",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9400",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c600039600000f20000600160008035811a81",
+            "gasLimit" : "1000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    },
+    "TransactionSuicideInitCode" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000000" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "611",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9388",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0x600a80600c6000396000fff2ffff600160008035811a81",
+            "gasLimit" : "1000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : "1"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stLogTests.json b/tests/files/StateTests/stLogTests.json
new file mode 100644
index 0000000000000000000000000000000000000000..888f6c5bba13ab85c98680933af53afcd6715500
--- /dev/null
+++ b/tests/files/StateTests/stLogTests.json
@@ -0,0 +1,3712 @@
+{
+    "log0_emptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60006000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "862",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899138",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_logMemsizeZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "866",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899134",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_nonEmptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "898",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899102",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_nonEmptyMem_logMemSize1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "867",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899133",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log0_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "867",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899133",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_Caller" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000002880000000000000000000010000004000000000000000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60ff6000533360206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "931",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899069",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff6000533360206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_MaxTopic" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "931",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899069",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_emptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x600060006000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "895",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899105",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_logMemsizeZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "899",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899101",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_nonEmptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "931",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899069",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_nonEmptyMem_logMemSize1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "900",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899100",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log1_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "900",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899100",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_Caller" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000002880000020000000000002010000004000000000080000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60ff60005333600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "964",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899036",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005333600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_MaxTopic" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "964",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899036",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_emptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x6000600060006000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "928",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899072",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_logMemsizeZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "932",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899068",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_nonEmptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "964",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899036",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_nonEmptyMem_logMemSize1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "933",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899067",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log2_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "933",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899067",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_Caller" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000002880000020000000000002010000004000000000080000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60ff600053336000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "997",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899003",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff600053336000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_MaxTopic" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "997",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899003",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_PC" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000007",
+                    "0000000000000000000000000000000000000000000000000000000000000006",
+                    "0000000000000000000000000000000000000000000000000000000000000005"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60ff60005358585860206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "997",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899003",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005358585860206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_emptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x60006000600060006000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "961",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899039",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_logMemsizeZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "965",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899035",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_nonEmptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "997",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899003",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_nonEmptyMem_logMemSize1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "966",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899034",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log3_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "966",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899034",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_Caller" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "828",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899172",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_MaxTopic" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1030",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898970",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_PC" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "828",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899172",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_emptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x600060006000600060006000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "994",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899006",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000600060006000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1628",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898372",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_logMemsizeZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "998",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899002",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_nonEmptyMem" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1030",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898970",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_nonEmptyMem_logMemSize1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "999",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899001",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "log4_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "999",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899001",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stPreCompiledContracts.json b/tests/files/StateTests/stPreCompiledContracts.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f1db1275fe4d2a782fc73130c031a23ae7469bb
--- /dev/null
+++ b/tests/files/StateTests/stPreCompiledContracts.json
@@ -0,0 +1,1674 @@
+{
+    "CallEcrecover0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+                    "0x01" : "0x01",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1977",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898023",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover0_0input" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x6020608060806000600060016103e8f160025560a060020a60805106600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1441",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898559",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6020608060806000600060016103e8f160025560a060020a60805106600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover0_Gas499" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1376",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898624",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover0_completeReturnValue" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f1600255608051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1648",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898352",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f1600255608051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover0_gas500" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+                    "0x01" : "0x01",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1977",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898023",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover0_overlappingInputOutput" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020604060806000600060016103e8f160025560a060020a604051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+                    "0x01" : "0x01",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1976",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898024",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020604060806000600060016103e8f160025560a060020a604051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1577",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898423",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f160025560a060020a606151066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1577",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898423",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f160025560a060020a606151066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallEcrecover3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000001" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1777",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898223",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x600160005260206000602060006000600360fff1600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xae387fcfeb723c3f5964509af111cf5a67f30661"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "934",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899066",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x600160005260206000602060006000600360fff1600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x6020600060006000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1182",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898818",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6020600060006000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x64f34578907f6005526020600060256000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1286",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898714",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x64f34578907f6005526020600060256000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x64f34578907f6000526020600060256000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1286",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898714",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x64f34578907f6000526020600060256000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_4" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1235",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898765",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_4_gas99" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1034",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898966",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRipemd160_5" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "32684",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999867316",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x600160005260206000602060006000600260fff1600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xec4916dd28fc4c10d78e287ca5d9cc51ee1ae73cbfde08c6b37324cbfaac8bc5"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "934",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899066",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x600160005260206000602060006000600260fff1600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x6020600060006000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1182",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898818",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6020600060006000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_1_nonzeroValue" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "19",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20099981",
+                "code" : "0x6020600060006000601360026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1182",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898818",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6020600060006000601360026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x64f34578907f6005526020600060256000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1286",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898714",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x64f34578907f6005526020600060256000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x64f34578907f6000526020600060256000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1286",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898714",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x64f34578907f6000526020600060256000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_4" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051",
+                    "0x02" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1235",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898765",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_4_gas99" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1034",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898966",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallSha256_5" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000002" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "32684",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999867316",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f1600255600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stRecursiveCreate.json b/tests/files/StateTests/stRecursiveCreate.json
new file mode 100644
index 0000000000000000000000000000000000000000..9834314848b815c59b6685157731d3ab9a619e11
--- /dev/null
+++ b/tests/files/StateTests/stRecursiveCreate.json
@@ -0,0 +1,7231 @@
+{
+    "recursiveCreate" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0007318879928543f66b36e58900a870dfa83312" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "001864a1fbee8126e530b9242353d9cb76b043f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "002b88d7e31f20b1cec3ae31ef8ae3f017820cf7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "00ae33b99c24c45ce086aa9a1844fe8ed55ec312" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "00c3d96a0eaddf7975da5c8718c26d65de0de59b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "00eb1775a16c0965c299f06a0873e11825f915e3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "00eb67f5e410e28c16861fea7a2ecc1e0011a75f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0116be8937cb591d6db17246c91dc3deb1fd0e1e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "012255fe8647bfe207603a62536ac6ae7a230ca9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "014337758eb4abf60a8e458a97acbd8b47fa0c31" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "01619145d576c5b3130eeed16f29501f2773c958" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "016cfb16ce1ab4c15eab782e1ac3b0d7f5bb264b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0177fee01c15eede3b794e761753c1f6d108b7f3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "018b456893203c6e3a5661e7328b5a858904cdc1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0199dd91369b5ce0467b68d57beaf1d96fdc769a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "01b26e834122a942828698305a84789ec47c0454" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "02391d38c9b4f03e9225ae5b28230284fa397a09" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "029f9045d1904fe6076c4dbe77bd33290f390714" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "02c577c9c1b247c0ea60b1dd50fa895c086e2f2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "02c7efe87a470a521338ba476a0eaf7a535c9c56" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "02fa5c7476f2d423f27ac8afa1e357db95f920fd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "02fee10ca6c1ed23e651f29c97a310b1b4dad13f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "033b61ab81ffc5adce16d365458629d9f3482129" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "03b685fb90981f103fde64c3bbb5fd701c84dd0d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "03f3095f9e46a8ac62005c42aaccbc0fcdc3aa32" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "04110d816c380812a427968ece99b1c963dfbce6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "04308fa2e7af944dd7008a7edbe5221a52e2bc87" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0441738f9f0a045afd77a72ef8398475c1111471" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0462dd089e0519c581654520d17763635011fdff" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0473710fb4277459429e0c4a862ad3e4b45692e4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "04929feafa156581a24d8a0bfe8154ffab39fb37" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "04a104904b31f401966da211ef40874d6e97ae46" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0581dee4d5420c2f6b1614ca62a4d66bcf383d0e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "059ec3d5a255df8a5b592659ea5fdd963e9bd0c2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "05e29ccc32df8edacbc5bd6fe19fb4ca02928969" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0602479ffb0636a1ce0fb57bf7949cc978250d2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "060e7bcadd084fcf19db5cc1ea769550bd8f7508" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "065c627bc67fca3636da49c34994b6efb2adaad0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "06c4341ea63b3431260716e2162ba90abd9628c3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0723789d0c7093f6e97c3fdeb1324a75427ca6e8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "076ad7e168093f590a74f6fdce56b492a23baa2b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0801871b468dfdcc2d3bc0c0d01cb6ee02afe581" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0802fc1dc1a5dec7fcbf1d50f3d8a944099ad72e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "080e2ae63ad3891bfba9ec5200f4ba383209ecde" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0891a47ead61f684dc876e12d5261ab614d0fa09" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "08d19f247ca974ee89d4f988cac4becf7a177723" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "08f86cd9e45cd0f821b6088ce2f1b3c0f70dba07" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x60206000600039602060006000f0",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "098de34931d0d159e2631aee55524c217624d095" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "09957f64c3396f36daa03c68fa6c997eb7903df1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "09986b78d02ae7c8eaa8b62053a3ee78deba79ab" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0a1960fde1fc2010660dc9cdc299facac4502363" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0a517d755cebbf66312b30fff713666a9cb917e0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0a9015286f76ca4fbcc33e74e9c414be9774a67c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0b4b7f08623d9b3d6514baf529399e4f1c0ad944" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0b98f3276e76e9982d7f6996878ea5196fda62f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0ba7f30a90b699e3f906bff7599b230890bbd56b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0bec2514a2a40586ec75e27442352d1dd2bce537" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0c0cd995ac9e488544723e3e8e90a5fed98a6958" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0c1e13b0604290abd900eba3fb6b7560b3401f58" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0d11b1966fa90191f6927943c476d36fa3a31556" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0d1e5ab3b0c2d1ad5a562c123b7f01f4145074ce" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0e0905211a442bb5838d2d6860f4f21e6b9c6593" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0e639c40606e9329259d2f945f59dbcc6c5c5cfe" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0e700a2aba22bd639abf05addbb24c53c3f0f3cb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0e8dab5716375707d97656230beb5f1445e56309" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0eca69ecf3068082cff932c044fe39142ab6268b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0f065de4c5c4a842f52a30fdf7b0162594df70a3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0f0f333b14cae00e0f74e1de336437d5644ae336" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0f2fc64833681664e54ca74ea756c7233a05dd85" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "0f8f271215cf51a0646c8a60ed626515b3ddb739" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1039c22c55420b0d7e65e6e6e65798f3f4c1e725" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "104f577c92f14f3684c13eb179b9969c05115604" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1057c6ef671b124fc14b5641c167c6e6756d8cb8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1121c3fb4f490140339dabac59a62dd59a9912de" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "11895349d40ea4683803f8eb7ad1d2355ff906d8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "11fde66f162bbb0e19d68f0c774c997d0165fa56" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1209046d7bf46e81d8202422e630719c906653da" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "120e38f3899a4e2f9f848a82c7afee288d14e7a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1236efbead5ada892f61e7e4e59faa143e3bc01a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "128aabc28c928691ad3415e3c57010c40694cd6e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "12eed250610e4d59e841381dc46deaea3d9305b1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "130d08c2381d23796ff403d8f1fbaf204d90e3b8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "134c36c64db09ad23fde5b43a3a7a92d84dd5300" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "13911c90a6ddef5182a772116c1d9e98f27fb1af" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "141182812579a73e13dd878d8a94bb628143b097" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1456fa2cf6376b40069504e491e64aa40484fe3f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1480213270423eae9d6b0a603541e989998453d1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "149d393bffe9be2336e7ffd6a109f05318dc798c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "14a76e43bc292a0e69bace56681c4eb50d8e52d7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "15146e7f5a3d2db1c655ba9d8eaea6c62ca34496" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1555dfd05f003c056dc219415443be1a502fdee1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "157f8c66dd3cae32485b2d68a51c1dd7923bf91e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1588c83de3fa7b22bf6aa67a4e91f303b490cbb8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1591af76c716952018e52e54c716e8b2226d494b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "15c4f7ebfc781a41226d61bdc0fcdc98fdd8bf45" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "15e75e648b604b0b8028f7955647eac6bc850088" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "161f83bac94d326e2a8debba84379ab72a14c6d6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1622e5aa3015448c3a7560b15a289d9aacc5370e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1660ada72b0a07040df8d063f2f3f3fee891f1d0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "16c5f61453cff59c6b7e2a690cd902b72208427f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "16cab73035afa73268745a3c2937b551813c4960" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "16f5ee37c60dfd70f8281ac16cda47d665ef8789" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1756aed6799c904988cc7a1dfabe77fcca058655" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "17c7a85a071c3dee708baeaf56c208752c362e56" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "18500d6a8e3e20ace9aeb507c213b6261b23f5d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1872142d84f7023b181766b790a4487f4012527c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "18731575d0a6339f6317c2a1b628d8a4c145328e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "187749fd89567f9519f0d50b4a19ad2600440e3a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "187dea0407359c9579adbdf1ba9fad4a92fb358b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "188921ab89b5b8bcbe443676626e6012a1ed7dfb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1889f5317912e414fda653c710d2c17b7d5651e2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "18934934c2f7d8b6b645fcc90460a966df3a716f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "18e0cdfc5a23465cfb3566091849c044d2210b55" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1963ac8fc10167891e91b4d3f53e09e0b7c9b55d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1a6bbe5380998bea238848b7a5927fa87e7b9fe1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1ab2ec9fb4e5d9d8cd15a1ad495ff314b97869c6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1ac3dd6a958d88e45c2c55d938dba74fa892084e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1b6ec3b2772285abeba8f53839fd96de995c4bd1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1b8a6f09f8fc9743b59ddbb2f105034e32262552" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1bce33a58c2741f74daab60067f759e9fc5f8c40" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1c2749b3a6c574b21622761bef7274261597ef2e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1c32901c93008d3e09928bdf3385f32ecff9500e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1c6c53405b0eb8800a527cc5990fe3b259b50a4a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1c827d36ec915dae96fdc0b164fb7bc1be9467b6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1cd063768378c77cbcb93dab0ba4c345d76bb0fe" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1cd52bab323ca2180a747d3c8b8405397003feb9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1d3289a828d2bb4a86cda52b7772e2d0d508bac9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1e1505a86f6b0fb5f7a4500cca953462cde929e4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1ea264b74c8f6e50586097e2e7c9a39419fd88de" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1ec05c9f7c0ececff5088a06157f47f3e9dac9c0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1ec26f14651cc567ce691ce83ef09eced6b12a6e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1f01dbf8bd02bed14cc0a21831e044faa3f66fca" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1f1960aa296fd1f00ff131357138001afcd858a9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1f323b00b7be1e9c0713b080cadc05f45e5e7ec3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1f5cdfaf598bd8002997b576e9ba849636c8431f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1f95c6da6a9e0abe74900ec00388094d32d98a42" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1fce5879444d729719c03b5af6e074b87a49d933" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "1fdfe5402a88f71bfbaf9c65f6df05b8eb6232c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "202474905af37a5074cfbc2d2dd0f2f205a099ab" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2040d98a367ea817f76fcf8574d4df51234eb492" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "208d07e7177b2e975c6b6d0eb3c5566900b87dfc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2099c5bdda1d98ce3b99988d768fa9f812a21f24" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "21115fe08f7ec434d4ec27e8dcfdf31a6e50aa09" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "21190aebff29feb773919d8572f8cc825bbf7144" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "21368af8397276e6e4b284fe36f525dd323bd3da" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "22230d8d10e81e01450aa68bdfbee3c20d969de9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "22affea985c1a1ab7007a55e77e80c54111708be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "22df73cba33d8fd14fc985fccded670de4041f25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "22f2f312befc07db595b5d9fcbc4caa7ee8df51c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "23138c70217200a44c58dceaa4f5ab06470213a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "241b46962af48709f1a19739ffdc7bd3f0d2c7ad" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "24248d1242acc87dc331e87f3142951a977a3d2c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "24ce22b6a7f4227e1e3a6c03c14d07acdb2ec553" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "24cea63a6f0ede9a0fa91907e841ba4174e1cd0c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "24dd378f51adc67a50e339e8031fe9bd4aafab36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "253a31b068a402910eb30758704b78c375ea349a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2559cea11e9d8fd293253a8ffada7558c9c4db86" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "25c0d5ce71eec198760c001497350ad83df55ea8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "25f81565c6ac2e22d7e320168222450c2cdf4f6d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2600b9122847ee06e201ff6a734fdcfa74b2be73" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2652f49b5ad98503231b3befe7587c231be8a5e8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "269f24e1ae86f63876b0504b7b26e20483fa95f8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "26be5205dce0ce433dca3602886578160e6d52c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "277c19a0f1e4f5e4339de4d0223fa254a6c8a5df" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "27b3a0698a207d5ed960cf71b1ee9fc54c229eb4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "28313061667479bb25119ca3090cd25c4a99a20f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "284452c049bb65ec77ed7502b19abf699127c21d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "28cd47ab2e86fe040740206eb31fe193df7cbab4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "28ce21f7f28c8a546bca1697ada45cd73473465d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "291cfb4b02976ffde7f1f269a3e7d30940367e55" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "293f982d000532a7861ab122bdc4bbfd26bf9030" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "295882ddd91b2f92c43bad0a51fd0ef7af61e729" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "29799a64a736832cda536d687dd443ef3bc31e57" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "298b8bde7997684bfe4434cf6d24d50ddabb69b2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "299528bfdcf20ff8e19a7a3fbbdfe98eddc2604c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "299f80e93d68725830c27cb084265d0e634e4f77" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "29f147c366199719adcb2ed1d528c4f34c10dc03" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2abef5958c8b283eaeec4557844ff1fe194e6cd3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "465224",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2b5fbc2f7e76f6281861cb4282effb94d609844d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2bab1d9132d47e56f937ef50987cc52c9adddf0b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2bb175c167599417f2192d9f926a5c648d17de8f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2c4a413bc345da77b2d07a17313b6d89aef2c2c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2c748f96ae0e6e9b01395e8a73dfc351c46658be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2ccccc0744051db25927d850055234117778c1fd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2cd26944d7baa6d92eee478960d5778375862e85" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2d142ccaa1337198d592bc36ce7c5447da73f906" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2d960addf6048f155cfaac4ad513f46429bb58f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2db5e35091789102bd0019b4ee49bcae42524428" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2dbc14a87a2b5a8b780e460dbe0083d8260326f4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2e070631694c093a9a329ec0b4a1cfa57e20ab77" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2e574f7a4c8f0e80964604262ef68b3168fd31ef" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2e83c90e7fa359705ed2138854a83a9145c27a8e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2ea29d9016f2b1141475e4c3c62e031c0a908a07" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2eabf4237f49d4cd44ec256436b99ba41828d36c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2ed524088290909f92ade6d5f9d9c24071c26662" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2f171d1f2cf19f4a458b7dc4db89fa7cd818dda0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "2f8ac479ce5baade6a63ecadf9599bfb0ecdecde" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "305773e25e157761c9d55cb7d9e24fc1b953a8b9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "30b37f280d6735ee04239de0963b071f83c13a27" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "30c5bc3861dfc5a70325aca029ab5dcb2d72928f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "30f51302b4630ea1b8bdcac380bd97d78c8f60d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "310782e2f6d97ef0abd4a4ccb75b401a7d348be6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "311f9efa9544b1c8a8277c52e0f1ca47daec8c00" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "312f80de0869a8fed49c8ba843484411c47dd13e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3174a074366bc04bfb7f2a728a725cb01cd575d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "317f31be5e04361b11b97ff2d6fc682030d8cd8d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "317fda8ec45232a8259546a4ca8ebef16338d47b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "31a87a9e67b2728c14767de26753f205b793c5ac" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "31c640b92c21a1f1465c91070b4b3b4d6854195f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "31e7dce7c8469a6dc612dd8c0a1242846d31c069" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3229e332af8eaf358f44aad3a902a6c47f96983e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "32a48ace80773ad092de1d9bcaa00787353b5fad" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "32de9810bbf442f9209f994556bc9a7f7e6da500" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "32f9418411245a8bc6982ff71436ed2de87e3d96" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "331a1cbbb58594c3636c0e54de517c4a6cedc27b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "33207da78e5ef3dde6fceab85bee1b5bf717e139" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "333872ba7e8ce9c43e158b12a3d038d06672db7e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "33b82c3871bc89d9137c62af099a0c4e5911a047" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "33c85ce982d0996ff7313c1387ab93348a6777d7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3432c3f9f90cb61e79f39d310bdc6cb8dcb3a49a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "34c972120d50fbdbb38ba536e4d61bc8f995d19d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "352e4ddc3153285117254b1cc378d297b7a057b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3539fe0192009fe1a9d35901b0ba951a59348a97" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "36630619f71ccd89ea6fba8b13099d1483187b17" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3671a99d2a485b30fafa2a65f405b6b03ed32ea9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "36a9d95fe0c701c65370560445c6a80b4e13c8d9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "37609ce3799a1b75ea6090da3d014d59e5e7851c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "379ef6dde2bc54ced45146d4907639ee7cf1c8eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "37f998764813b136ddf5a754f34063fd03065e36" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3820c20f3f8ee1b164dab460b05a979640a41369" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38450559e7ed9b72c80aa00855b942f9bac1b281" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38479ce52243f1a8b358515a084fb41533a723fd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3867a470ae1d99ccc7af287ed95ea4da4fd49e52" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "387b1112283308ce33f63062a7531e6fe0f3af16" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38813e8d77b07f357888ea1a7805ebf52c59189b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38ae3c2e0c1fa2eaec3648a2829fa362b5e01351" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38c622aecb7e84ad4fcfc327ae9a1a17e2dbc36e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "38fe3b47fed5fa6d060bde66598bf5a773b831eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3917f5ac4614ab7d126adf2f5b1d578f2b91c370" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "39457953215cb93e68bc5b351d63a8b7fd16031e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "39d9b351db53d59af4907116d594ebba910474f2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "39ea196ad4678ac786f9ff4ba12edbb364cd1baf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "39ed2d94ee4aae100b111c773d4f3b78bd4e9291" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3a9d3ead70f9c3cdf9a64b25b5c1bf765fe09fec" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3b7465c98051ca273d8909857047d5dc5b022af7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3b7d7653d3a7c2712d08bd29668163cb775c74a9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3bfd62743dab66288fe0b993d893a41d2dc3fbba" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3c4a4ef39f21e45a8f56e5c8bf8bacfaba78a777" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3c7c94fe8e900964a9885a19e09a4ab80213c5c3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3d082c9477c05d23447d1682257a9d0ac1f948be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3d64e9c7cee7c3d41cfbeed851fff8642bd0200b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3d7b61ce014d1cb84465f1f908a6a940fd991b39" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3da1b91d461c3220510e60c0c5b87be635068740" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3dd6e0baadd05402f490e3030ef1970d884a1caf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3debce965330c2da68edb1cdd3ac380d5ce67b10" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3dff39a90e67e86536dcc8b4dbfac04da831e0b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3e0506e272fb9d9369627282cd76a40e4046ee84" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3e1b0d3f5819f63c9621ba4d4af623a7b89b99ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3e3069deb6f503bb8bf155eb2f89801140831f5b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3e85699a24243e147ec809e30761d92c0d21392a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3edca986feba79717853d9b91595ae61d953736e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3ef5e42a0012b430169dae579f8dac0f6ef5dc38" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3f5bf6c71c4fae1a91c1cca72b539dd83762a716" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3f8bd9d9410af417dcc6969b64096380e1a6d0b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3fabe5e3c3a59fd322cb638dc5295d1e94cbcea3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "3fde19fb418799c0e1744b322314c17a863a0c9c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "401f65fb53496c7746dc6477f6f9d67246965d51" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "40652c9cf91678111a21c62d7206ffbca3d47c9b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "40e0cce7d94ab21453c5576f30a598cf9fa80e1a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "411456908355aa037314aa920e8afef3632503fa" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "41493b8488a0ae34cade12733e8df93a87f3ec7f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "41eeae22551bd18167a31036b363bdcec89a7d9c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "42bbb8e2c7347e29f3a679e4cc9d1ca75319fbd3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "42ea619ae1a90979837ad2137458d991ea0613be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "42f56890357c304762f1c57171cef30f044ea09b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "42f8c6079f5658fc8dc5629b63684f278acb7648" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "43b0edac3c2c58f16fa2380089d841c420a14236" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "43ec9b975f37266d0ff7f044581db559fb9376c4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "444e8af4b323407d02a7f96c209b712a65c6aba9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "44b329f4eb8ebaa00d731472964de821f8e53a26" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "44d13c51fb706efb7394346b00debea9ea46e9f3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "44ed3a04032bf3585faf1dfedb9806eeb8345809" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "44f344790e299b22484749266ea59bbcd58e4b0e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4582048e819b7d55b3c6f47e46ef8dd8fdd12038" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "45eb1861d0701efb338468964c2495db8e7e3411" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "462cf0e5071404ef569338a6f0a5b113d64a11a2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "46aa4a5c336dbecbabd4cdfef3b9fa65a8a12a15" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "479544e8b67a7e82120d3c5d7869b4c55f4a0de3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "483940025f2d36cb32e93ed80caa41f15487ee7f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "48e958f074c27f1d190e69ef8c01f86931b278f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "49a01a2696857efac9ba53c2705ea4ffdeb30419" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "49fc4b5136601d856188898008375b9c1bf5897e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4a0ec2620d55cefe3e80960f83ebc81219ebabcb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4a1edf2110e4ff29c69b835bdd375ac88525dde6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4a466c64765157e1a9dee46e1a26d95ac2664c4f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4a635e63aadc395c1801c73640f256250d209b25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4aebaa9fbdb040e8037e78fc37785f33dc3cafec" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4af174d239e86ee19d40026eae04486804602061" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4b2c0c38418eb142d686d124ac5fcb363b061fd7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4b414d48f3871bc957751d5895c96f090b509bbb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4b6dcb9105adc3ccc34c6c180e9e2212c1789975" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4b8558347f669cd9b50f70cb501cdbf05f93b575" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4bb5fc5d686cfb132c177aee8ef426e5de98cc6b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4bdd7615ee906a0c88233acc5816b4fdb4656dfa" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4c0cfb86a402c70e6b110a1237d10c7fc7fe9cd5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4cada4d5773385e68f4ff1efd1a23d75dbf1e61c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4cd33b31663c159fbd73cbb32f616eb46f7b18a2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4d47d935a3a4a4618c67f337a0075d26d9c1f852" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4d4ad735b52df9e88fbebebac2de1ede991f9994" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4d7a1e5009218cf5176a313f6922c3ab01d4970d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4d92228ffbe5ea89389a34a7086e4420d61eb70b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4dbe6269722a6063d594dfb65eba1f2a10488963" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4e36ffe7590f8dd7fa9c4c03cba3120674814abc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4e4ad0ada6b3beffa2436bef1f6a8054f4476be8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4e5cd86dc5f716ebbdf6ef572a369c227986bde4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4e76fc5e619a4200846eecdd5545b39499debb10" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4e86f346747b828937501ebfda05b2b8fa16f87a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4ebc77b7203cce293550d92b2b5587621cf53219" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4ec27065c52d294799b93700dcee6e32778f1b18" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4ec674e8eb6b890cbb7df926def8fbbb2a6bba70" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4f14a61b9f2f99e50b719f1345e76339f7618202" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4f36659fa632310b6ec438dea4085b522a2dd077" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4f5af8eccb582ad30e2702d07577479599461c54" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4f5c55986b93d742d196235aa7329df2c8ae5562" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4f86da4fecade6017d7f15e30d8320446306870a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4fc34bdd654289653ffc904f86ab2f17bad8431d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "4fe8f4ad85487cfe365ca212848f7c970c21e135" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5038bd4d6b5b31100c52c85ae3294d525596836c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "504ba70fca5091ea426c964ac631082e4ad51672" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "50aada85d21c462d9c2803fd3c22beacc61f496b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "50dc3dab5836e25872ec87bb2bb30ab57a35fb0c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "511b33319d0f7df487e07c4f5d149b27cecace46" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5154569b5138f7c1b77d4434860a92ff5707e047" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "51a578dc2949f3881535733a5b1a7b5bd308215f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "51cc4a0bffdbdd8313ed94ebfd5524e8200f4876" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "51fd18c9ab9bbb67c27373e8ad754e253e09dbdd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5216a59dcffc6105f9b58a0b397baad604c0dfb6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "52b774b5fab1f557024bd4a7cbec4cd014b81557" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "52b90967c04ab8adba7c6908b04eabf2c00bcf82" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "52f1ef4cc038ef92d0c1f9e7afd3dd3cd0c25b38" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "52ff6062b4e65231065d5579f870b7f1472a5853" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "533069310b9741214f30aeec58be9d19f40161fe" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "533a4a1adbae2d561beb729c53e46251ab3a407c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "534d2d9ab80a99d598de600ac2843f751e8bef3a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "54819bf1efa86437d2f38b4211bdd5229247d9b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "54a1706bea8f61e354b5296afa5a9f488f88ba0d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "54d1de66a65ecf30d79037a8c8af99c633113516" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "55010017736ad7e8e14327cf0230ba4c6bab0450" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5503d35e96e76e02db22c51fd7fd3d5c0667c885" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "552e158ca0fbd97f7b3c6208ad3f956a67c8df78" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5555d9bb89b76deec0c8c0cf37dcbf4b9e3449d1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "558fb0163d7794abf1b241aa4728390028291ce7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "559bf1337f14e89aee38a9859ec9bf8035e8f6c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "560d5f4c8933c5ca0c2c1b4f3e8b22958c9d7cda" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "569e42b9cd8d79ee5c5ea9c68ba948b7b4d8d84e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "56cb9d29e9be519d3fc1cd21fcae7750aaa8b845" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "570dce0f67e367a085e51a47d6c93891a82d452b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "57cb48688d626a12fd4caee130b11e1b06ebaacb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "58cbb2379b1fdac0a036bf75bb598e7d4fa232bb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "59ad59b53c0d9bbdf0ee0912732baa43eacaae99" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5a18f1d5e443321d54d1dafb3e3b5b6f2899378d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5a5e4ae2fd570b079f26dd7f8b9c90456d4b11c8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5affb7ff218092cf60bc1ba4b32ea65a32cd6844" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5b1718e3af89692315a673b5c134361408069b00" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5b2ed45c5376c8359479e1b48f8c07437ec78336" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5b4615bc4b0f10948e46f967ca6e64cf91a7753f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5b71d8cc27346cf6d64e101aab9c88dfd58d26fc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5bcf5f7ba278df5a31f48a5706e69816727a6e9b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5bd96b317d4163401c9b1a2271c03b9439e73e6e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5bf1ac936d2312daf08e481d85e99151cdfdb9e1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5c0ddde0773ca1b8f9b07ecdad9f47f2705640e1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5c45b1eefac6061c7713919b34f5dcae9d5cfc7b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5c70cf636b26ffc099fba8ddd5093e95ca8e7782" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5cf45d08c0b55dd9c34cc4cb718c917333f2e9f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5d07bd78606705bb5c62fd390123b4e45f7d74d8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5d11f35386d10cfa7121b02056d97dd932659943" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5d3292b79851f68d3907a550dc1a0b569d603f66" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5d57e28e16bcf33b37672eeb891b29c481e89120" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5de8956c0c99e2dc6715201b3a9e1d5fd53b2dd4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5e0ea0c533298d20ebcd19482a8b1e1854dda425" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5e5a0b9c4c36067c8730abecdb29ba97aed877a7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5e74c3c0f3bc39154407e9a3c55cde944d1ca04a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5e76969932c5d314142b23c555af4625fa6b9343" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5e89d5dd43fa9fa54381f234d1f7251387a0692c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5f1703b93938752face6e4657a90825b77f455da" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5f3f9c388dc0c9c01a5fd540bf9eb714a47fc5c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5ff4d4daf0a832422c4675a77720abbfb5afbba8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "5ff4ef866c3ad4102444d020c1d21c3d35a119eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "60a2db26238d52510209c569dca17c1f41c9a544" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "61144e43a08b3852bcd531d13f0485743bd835a3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6123d3be4335107712685be2d575958b17501067" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "61306db8b4ac256266cb379b5f686e25cc117590" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "614037f9a7be1ab2131d485845f297f2d62d569a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "615a957b818ce70fec123daafe552c482c59c5a8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6168c5e3b7d7c870e3e7eb53b152fcb920c8e1eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "62123ac69c46a06f7e3644b0dfcfcded535b8727" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "621ada91fe8f65407ac963de8e75d88d4c388cd3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "624a9bd6345be1a95c7fb509ca4bb77d05138adb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "629fdbc407b70b57eaa1523ab12c5178e81a5d52" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "62c01474f089b07dae603491675dc5b5748f7049" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "62cde2103198f54d31cdb9e9495fd7e1243c2c27" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "62e75c838a732abab87e1846f361721f03e7d973" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "636b02091904e5b452d19455f484306b8fe62dd6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "64134c8f0ed52a13bd0a00ff9fc6db6e0832e39e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6454029b19b69bcda3ba156684d58283636dea40" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "65e3776618742b90f1d9844c907b276854869abc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "66e68e1d0f65b4379c2864f5228d98de265c5e30" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "674840a9e918ae6b7560a4ddfb60b96a32636ba4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6792d18ead88bff9193e50fa12c02779f2a0f4bd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "67a66435543da4130940ccc47e3d9d164db65fd1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "67df3bc5f86456f2bc57f75c99a0389bca7e5850" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "689a40b4f540d145f6dc4ba4079e17f84b650f9c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "68ec6ebf20b30a31b09c7a35d847da342e24a3c4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "692a1a4da0b418dd701f5133e2b3c5686015a3df" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "697f8deffc4b33738f1dc02e792b5cb4a37ead06" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "69afd0683057a214d3bb3cc7d438961cf8c8b200" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "69fd2b9233b83e54861436496ad6b9fb28afaf40" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6a22049b6339e13438521842386a7118d6a1a15b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6a31cc57646f3d9ae3b63e1f604dde04d1ba52b7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6ac56f1ceee102b85819d789e6b29308eabc373c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6ad37e86c8d4b961b0302ebf0a540ae83f3679ec" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6af2602221d2477af828ddb2c1dec8f70a24abe0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6afeffe32a56293f23d655a1d1b2bf31d616c2ea" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6b0105812868d533882ea4f08bb628e5e9d811db" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6b5ced188780878d8a72b3e6f02618db2bb97584" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6b5fe85d1513c1a29fa825a343db7a80558e6de5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6b6945d5fd5172355825871803b93e57c5040653" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6bd29846f9fdbf3efcd3c5f3beff837ecbe9f4cd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6bda06aef03a04b8eb3e4c7d1ef001fc806f5f6f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6bed38b822d8823a2cb71883522f932cdde95b0a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6c14bbac448312636b86fe713185cf7d8ea6f1be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6c3bed6efc677ccb136c0d886a6f3fdb375798c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6cc6da179301a7ec4290cc0a5860a42ad188399f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6cdf4bc6759fe45be60aae1cb72d3fc2bb7f2d23" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6d1f3f15f36d76d52d65b1b78a4ac85e91f33d25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6d27b8cb6b9af8a56fca98f13033d15f10f66da4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6d33e2eaa419844043bc41073bf3a2bc0a6c1b1e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6d9834013a85a25df2e3dead1986d753457d7b67" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6e0a20c94065e338c7715046a320ff4495b4fa84" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6e24d18a80aeccbace499b6d26b655633c0bee99" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6e2da6b24262f419933bd63b03d470ba019350e3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6e53f8efbbec77187f733cb053a53a28e14ade81" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6f257471f06ece199232aaaa082d2b1ae7ddb483" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6f3dda610ec5a3722ff4ab49d1f215dd26bd8ad6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6f562b4994dff65756e316febb8d5a5b99e11420" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6fc7016fa33af287b3b9cacd092c26bd9a054569" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "6ff9622ab3c22e4357e90274d00291c527991d21" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "702433f6bfbd76274ec1bb641c4a0428298487f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "711b5163728968ec016a924238f743fa04f2d11f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "714213a080e1d2988acadbfc5e441df5173f81ba" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7161527e54370ad8fe44bc83d692b10b9f9b877e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "71a2fa577619a37c2e2336bb6c20fc1af193860f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7213c423e1db8af095bd3cefb15e43c6067635ee" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "723bce7438e7c70d113e954e9aad5dfb4551dbff" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "72969d083705c924922b857922930f2087426ca0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "729af7294be595a0efd7d891c9e51f89c07950c7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7343c0aaebc045465ffebca00e201c1f554c2eea" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "73c85788bca3bc1fb2e9b3056c595a4a7b3d2e46" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "73f9912db6e86599f256f090dffd915a845a9631" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "751c9d6e9b6d91897ab1754b15b72712953de9be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7528088649b574b14d14f4b5ba45285eb8a78ffc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "752e929cfb45fd739923f562b146db315b8cc4ca" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "754144c0c9b9fe7f9a8e40df23f3c315a7e244bc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7642513288c9da66960a6f3df0c156a8e1dcb119" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "769277251b9d3f0906a338f156238b159bc126dd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "76ca5805dcccf57966da8489d1720fb8c5dc4b81" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "76ea1b9309253b5c03bbd6e9fca6591b51fb3785" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7702eec59b0ee531bef08c14d0e6c89e7e43ebac" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7797a5c4bb655b5ea51bc966875abb3b19c0d105" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "77d724d278fa787544189c4774f03849be2868ef" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "77f14e248490de6b7afb327c0f013c54ae31d2a6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "77f263b8c785ec73f9f77dd11ab64fb0089cb164" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7845e6c6f5d014cabfeffe6d4d9d18c547d00fa7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "784c21d8eb231135ac99a64dd2ee334b045043ad" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "786102f7205ad86bb77b14a1b80d8b26cbf3562b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "791812110230af4583a4a6dff7eb425b0b0dfab4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "79225179187b35144fe9e8505cce2bcff3986ff9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "795d6e09eedae3febc172169c017fb67aa62efbc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "799b6226b099fc75d1fc2cf6f833bdfc1fe63e48" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "799dcaea1d20bf1428807757a84d6792798b74cf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "79cf9a7b86c0a7adb03ecb8967d70413f21b925e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "79f2d463ce2404b3e77db5dea5cc19d76ac223dc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7a315595e01d6e16134063232a01395187c9650e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7ab73fe69000d4087d0b9ceedfda0af8c4fe2d2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7ba53872256e6762bbfdbefb1bb80b26f94df9f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7be1a5856ef5951cf1991b57c00f73939c7030f8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7bfac062ec8fd11810639cc02f02aa8c61c6cfb8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7c26d9c9b73a75f1a468d06bd69e08f4d316845b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7c41aaac568600537f36df0e35cb625dfbed75a7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7c7d893aa4fba1deebfc9a5a14b27e2ae7f66403" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7cadcf3f4031ebc2bc85040ea16d1ad26ce1704a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7d3b079a8306f7cc89f1b9b23319ec904e3ad853" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7d4e21638e756b9953576f460037cd702d10211f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7d699e5ea61a26a7f677478cc79887e2f27ab345" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7d8dde5a13af888557ddd5b931dda20ae59e9e23" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7d8e57afa6550a1be621fb6c083aca311a1e229c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7e15566ad3e90f3c4c12c4d7fdb17e12c24da66b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7e2a31e29b84cb193202609dbd86ebaf9a83c119" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7e2bd10d506af5eaada030590c8073495230f37c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7e44d26c7ef8dc51a45248573f6a8e5a9f91a0ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7e9f915d9417cd7bc8220546680fa5eeb73a2192" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7ebf86bf849b6097c8af6dae10c52438538a0711" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7ee27699bf52e4db7f72b3f2591f48e8ad7972a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7f0506a35713c6a2c68152d15a4bfb1ccaec98a8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7f16eb03b09934c61a424e6a1c4649f193d157fb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7f3d23738538a34184e3cf16506685cf0884bac5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7f57dd2b577f0d5cb1fad7bbb2cf8f07ec0f0199" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "7fe4672c6fd2a05c7a91676e5ae2e75ea197567c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8069a4fb09d35f100d18c98d02ec1bfd997bb893" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "80a784f83657ad12a742b94e01c3bbaf3fb2c6bd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8135c9c23bfa97243ea79214772816339552f835" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8142cb33b22222bb9e39a66b53af12c6ca0b5375" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "814a465f554f949e6e2a6878539c705f319c627d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "81b26e12027f5df776edd5539791e683dc2e57f0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "81d6578dc3e3c0fb07a8d62f66c1eaf3b97dc2ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8228837a1a7d0ae41b857d852a8dd6b7c6cb3e38" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "82afbc3f6dba388dba71ee35f56ea772a53033a8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "82d03794122107972c0d075f16754791224b507c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "833bafb51e8a34c93f3100430fffc5ba61ef95c9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "83602911153c9c176419a17276ada844bb932527" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "83802f999d793e8985b916465ccf6050195c0167" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "83abf69971313b011ee30466e8f703a460400557" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "83e3e5a16d3b696a0314b30b2534804dd5e11197" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "83ed885c9759d5524052681a5602616a4d565e87" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8405a655c77ae3ebef4410c924cba9ef22a57f42" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "844301835752f15f39550cdf531e07ccef5d133d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8507d90ee605e59469a35fdc78e844c59894e003" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "857109cf04811d5273ec3af3f3d3bb56e93d1dfb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8692f270fea1b23b492dea1755f48cdd1dd78534" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8703df2417e0d7c59d063caa9583cb10a4d20532" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "871986919b8ac4032193739eeae09c66765f0f15" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8719f47f3dd875955760868a4fb23f761cf7d4ad" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "87946e396d4fd04d02f117adf25ac427895878b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "87b02d6f0e02d90fb05adf14ae74570ea8ca6aeb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "87b27e4b436adde9bf724b4889980331dd038d49" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "87dbe63fcbb0c90d20021f9c01a03e7d94916b3b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "88a16f4f893665cf06d9ad7a7ede8d9cdf833b7a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "891c7f214e32206e8f497fdaa7ee419e2e8f3ddd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "897003bcc0313258e7a3517771982e05e4cfce1f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "89e81283794cb458b9590002ce69ddba3c976a42" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "89f02008028773d99248943a6bcb14200f4509a0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8a05aa8ab787526a0591016c2aee95037b8a478b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8a2cab44ea3d5c52c704f060f4088e505791a57e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8b0c28ef1527a918fc7dc134ee6c00f069c7073a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8b0dfaaf9135721f01f3712572ea9963d70f49c0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8bbe1ac3ee5866589a669dd95744af5ee83e1b72" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8c25b51ae5745b82c7b489b8fd4a9994b9679a0b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8c2e2a704d809931e711b89162391f2dba837406" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8ce9124341c4ca3c690b29f3575f3cb9833c8c3c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8cfda5300d7544327e32aca175840f90860305e7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8d7912a42951e7201c8854b98a36e4203508c3a2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8de072b1fc7f48cb2a42e7ee579a462e50e4cd8c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8dffcd74e5b5923512916c6a64b502689cfa65e1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8e1320b630d8a411819c16dc0edc2cb77ed8049d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8e15b61b6735457672c8d4809e30ca7877e9fabd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8e1f5c577cd5a404507687ef379cd1e41c4a9a9e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8e4354916a56d367dd99d3eb120e27a1d8ec6e66" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8efc24fec9b67ce053a55abaaedcbbcc64e97eaf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8f55e75b453fbb3071e4454119a33477c6028788" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8f75ec2d8d77fd6a26f4c01f7b0384bd60418874" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8faf239455a012d6ef377a83448c8185466f8511" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8fb5af158980be77e5d137ab6f95000407041099" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8fb5f5dc4d66ea0233a652230d44299718cb9f9e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "8ff9fb732fc13f492704a9f47c47db4e877f6dc3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "90344e80aead27d6b007ee73dd8fd8169f870f51" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "90f8d2eba99d7e50525edae64a61a28526eef894" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9137343457792227d68316f6ac0bc3518a7702e3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "91aaa30b2bf342c6bb6a315251ffe5b7e123bfa3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "91acc7d4c4cc7affac116157a53f5614959485f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "91c87b19dcd811fc5efc567a022bca52d5e2e252" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "925cdeaf40df0ac82648432e65481350417fd848" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "92bbf48cf4a124ffff047cad76c82db1a1889803" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "931543d59701f1a123f3850e4c6e4b0ea097ae5a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "93840036a3c19b1e91ba0ea10f95a5041ef61a3f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "939023fa69f246b709a97f16c37367e36267828c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "93a5ddc7d7b2a2bbb7a61086aa6fd0cc9e202b0d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "93beac08e1b6f1ac32c5ee628bc4356feb5e54ea" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "94602cccae39d50fdc504869eff546d1678f0ae2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "94bcc8632137dd2d666003e33d1e7c2fdd6e95e4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "94cceeb51248e76f0fa711e92986ad36208f6e93" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "954933598dcf8e04d6f4ae5b311673409e85c809" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9580d4c2c6795fcb1ec84bf6a58b873fb2737788" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "95a4d7cccb5204733874fa87285a176fe1e9e240" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "95f36953203283bc9358f396b627dc79480a8ec8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9606aeadd83c5da2a613b0e132f0a6c13cee43bf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "965025b3b611003c82c8c9b69b35b4c5444cde69" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9663275f953d54a345f3dd00e2eeb0f156710129" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "96f4278992ff6da5e8e60456279d9bc5d1f7a845" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "970e2fc1f55b1e2b214f84e155ae6a9403f891b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "97316b1fd92c5e6611acffe79899064fd9274c8a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9747756fd264dfe7fbb2f46aebb3e9b084ccf45e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "974beeae03d1860c485c0dbb68e5413317770b16" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "97a3956189161fe3d52554c2a599bb619983be5d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "97b61770815f0589776243ec8ffa365b86548b28" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "97c99c7f158206d19196df8d21573126569d918e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "97f0981b0a6cb647dd7b11b52c92bc1a3206d2f5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "980410833d9ce53a0f944ccc629032fb0e6ae6aa" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9848ce910f5874ffb5cad5fdc3507e8d54fd668a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "985e84916da5ee358e1c119c9b12ff133da52d29" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9862b64181c8bf5bd53e51c5f596528ff82bf652" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "986e30c8512ac023f09da460202322a88e98aa66" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "987600e63a25755048e018d1976d8ec4657f359d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "98ae7604effcc8bf6accb109ebf78fb6f5dad01d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "98ae76bbf3fe4b779df55df06eb0081ac95d660f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "98b163f2929e5c92709759e3215879acf32a3a98" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "98cf6cec29c58634b6022fd1e8f54f912921eef3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9917620c3df2e3cae0f0e690b4da82221bc26efe" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9985ca2474151f5ab79a388ec3b0d6fbf42da1fa" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "99b2fcba8120bedd048fe79f5262a6690ed38c39" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "99d6d7fe1a4f0f7d92837486a1f9d7dd500edc11" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9a0ca249b7e4f00f62ba5230a602c3233895cee2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9a0fa2b2dd4993b5ac3370b4047f5e4472121674" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9a2f4d9e7fd12bd7dd8141098bd3363bb644f068" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9a45843cf7ed63ab79f7df4d2bf80512d259b0c2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9b0a69ce744a08c595426d7cfa5fe5f4dc844a25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9beadb15fd4fe1f0755ce82dd160e1a798544a1b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9c5fc050311de43f7b7d9a66e8319ad3c051a252" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9c89251856283a8e3aed6d801ca965fdc1da4aa7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9cb15938a825ff7c17ae775b6454730983522906" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9cbb5a7f2afe219ffb9b787065cbd94ad44ebd24" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9ce1b776e1a050af28b1034980a628b7728b0831" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9cefc7e38d2a714318e5c36c3c21b226b10218e7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9cfe89d89bfe28ba95777b6a90ac7ed86b0e202f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9d0e24467eaf9b797b9e3f6a6084958889592ba8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9d9fcb724db6738e2ed07f6815a0e5d45b3042bb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9deb7e973e3567140c51750e92d7c5091174f506" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9e30a8e67c1dc0ddcbcb8c0d957101801fd250cc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9e8fe9f31e954787e0f9d01b4a7a0c8d3d320614" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9f28528f2db498c3a0e79b15b97d3b3e9357e942" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9f42a00ab7bea15357b54e16867383fdc02e7060" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9fbf90147bf6ca022818372bf38637738d553552" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "9fdd9d67e3e2c78c419e3ac9bccc7322041c3b1d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a015c57718562f3839cdabd7d4e9c86f1a321a1b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a02b80b54ccc306e042c286172ba903dd53fa4c3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a06ebfd07c3daff1115b82d67be5bf4079ef6ea1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a086d90b189bda22a2ebf3e9b7092f1782e4fe84" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a0ebd1b4fc0821dde34f102f6030fc9c40b29ab0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a1230890b4634e4461d6295fef3b4ca6d8899bd4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a1ef404093a02445fe14243e853a641c23ecaff7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a20b30a1e7723ce15f80e9706fe9c1ea05170a2f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a24089bde6e39fea0d157ab9aa4173882e62f39f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a2442dd71a4e937fd73ff383067f97ad4c83b4a1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a301df371257a12c7bc93194ec045d211a2d4359" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a30dcb9cfbd0e8c874e4f919dbe71be3545464a1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a318ee3c41da839fa1002dba1f9a140274ce59e8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a31b0038c42665206876c410caf02e67405dcfff" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a31be87c0ce167d8e9380a34c7d5004e42f37840" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a3396b3bca8473c21f9ab1fca8a40ecd580bc625" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a381c1eb58a73d7e7c8b857fcf3a1b50c6116e1b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a3a80c15cc0e13dd1aea5949c48ad5b120a8d831" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a3ad081c8f3b79ad20285e881e0e4d011efc012f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a40a11c1f943538e64466de3b3bf8c022b883094" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a479aac07f3b83ee401944a36812d665f54ca6f7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a4a5e07598b0d6a40fe62ca88813b63a1c02710e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a4cd6039bfcc6295533a985631a151bf2e0e8b21" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a5303b50e97dc17384209bdc3723ddc6eda7aea0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a5552ed8dae24eaed9346af3186f634d38ee9aaf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a5ddf08c7de55ca258e346fd1acb1b71cc2f8829" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a5ec829bcc187b6d19e825b5b6f12f86f81cc063" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a60724458ce6cca04016e99826fff8c99c32e3b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a6495f085bc30ac47e89a9a700e406e26286c3f8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a65929129c13f2405697b704fb1c840987ad36f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a65ece83e15c7320aa0ef7ff2d69c2ff61fde661" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a686b20553a38e866228ce003657a71200957c3b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a6eab9c538a79d9ffeebc5d4495fed68dccacbd5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a71525ab6694ead3c1be0aad07bac06e69192524" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a724835568fb5e3986c1e87331a18b6628b73e25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a7547a96b2c999509ae062509a0d426fa46ade62" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a770dccb354eae253f170825000386233ebed231" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a777e559211613e73d9d0cbcdad62c88957d6f25" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a7aaf603309127956371841badc44b69252d142e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a7f111e1b259c9bbd4beba8ebab4dd6d35bb9ee3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a89361425f7403ec9e757b5d1a31993a79189a34" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999434776",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a9647f4a0a14042d91dc33c0328030a7157c93ae" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a9ed1d8a969237243d26f8728287cb3eb8730662" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "a9f73dca799231e385ce5038c826b03eff0d1145" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aa6cffe5185732689c18f37a7f86170cb7304c2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aa839cff1f78242d01a33305e1d9973cd7c66d4d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aac939ac7c11bbbfb7f4520d14442a2460a51e87" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aae4f6978a8eb4a7be406a2a787d31dd49cd551e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ab118214a2227c79eab2680df0a96d0ad67dafd3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ab1b93b6a83c275972ec2a6b513c3106dda84f47" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "abf67dec2d1ec31dd111c2f1135818b6af86c662" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ac0dbbd8aa555e012e1b5fde0b4e1f20e30a057e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "acbb287ca3f98d4775dce56e40ffce57ce4ba179" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ad02a5cab29480ea5b67e354b0da540082500327" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "adecbe660a4943fb6feada38775e51259ea15af1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ae17512fd9edf51989081b42962b2fc85de4a2d8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ae5837876e23fcefa0f204d7b6433966ebb854b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aecb52facdff422fd67875967e9278a7b872af32" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aeef5b5a721ea3c03ca909bf1f71c122ebcd32af" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "af3cf705624b239ce07280597a55dc8ca69dd086" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "afbd8818fe046adfa468ea58a217b83f7d5e75a0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b008af759b5359810c78d181f0743ed85c286116" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b021f73dfd1500257934aacddd707e6f67173edf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b03a2acc80fce6d54bd1db95d7ff24123ed6e106" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b0a10fa71a1c4c621345666be094909ac112ec82" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b0a9ac49b7fc9a45c9e7b358cc2e9e09dfe361d1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b0ea2ec7623a1faebead30c8007b260a4c62f99f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b0f8d2e75cd431ef9d818a2552aab19a6a99c1d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b14b3e0660d147b2603ed92fec4ff337e3c259df" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b15c7770a476be2c77c3bd50d60ea6b2cde3186d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b1691d2608aea9d7a56083dc7dcbfacc93a4287a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b1ec052c576186de285bbd31164de3b19a844dc1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b2c10a1979ac6236e586ed704cf9dcecb034b8b7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b2da69bc3361eaf80dce81a17d610217ebbc7a17" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b2f828407f1a5fcbb1e4ec079c22d791c7fa5478" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b31b1fe90a535ed66dfaf1bf9e1062190fbe88a6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b376b876f7137844ef5e2db1e307713885ee5d33" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b39c43369a4ec5e4b2dfa8b3dbb3a12bad630b30" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b39c8c3ee619a2946cf540cbf16720a881110f83" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b3b4dcc6ba6c6d8c352684bc69a135cccb2d88fe" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b3edb875f0dc5faa556edf77a97e53c9d828d146" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b4429d6274f10ef0b7ba30837c5de603ed4c16ef" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b4481bed4acdd11d8f22f535016a762cc87845c2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b4c315d98fa6cbed10c6331e2a5e4688ed0b7f7d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b4c898e7d827a75d991aec0a837c23aa8d9041e2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b572b99fc06b16a232d74898e587398d25d7d33f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b5f4de69833ef9f1392c74a5ab905c5cd1ab2874" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b6367a493bbaed7334456b3646e4541c9e96012e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b651decbba52842e8fc86afda1168ac549dea7d6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b678cef4a4ba3f3642fa128daef4ed6d50ba1a0f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b6bcc464b7b7f0359e87e9a9517d10823a2e0c93" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b705cdd0dbc620e11fa470f9b4938c5f9f42d84e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b7650fa902a0ad81e8d48deb557323bfcf32efdd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b78428568fc511f4a6ed34c2d57c4e104138ca98" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b7b7c5f65fc11a6bee686b9363884811be247c43" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b7c425948402f9382208346ff48ef6ac4667baab" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b7fbcbcd3389df89233f8bf6bfa8acf892958a33" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b88173b953f6c1b613b6e878cfdb34899e3339ac" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b8fc89fa4eae09e1b4bbb51f4c1791e589368801" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b9261902783bf36bab49f18323a9c8e4ad86519f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b94d3b46afb9954a375e50a6fede26705800a057" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b96672ac912cc5ad6f75157401ccd9003512ffc3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b96982fae6a70aff19c2d99c3b2adc57b151d784" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "b9f7e8e7ea5b1a7f184a152373526ac7acf4477c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ba158ff71047c0322b1474461f94c0246d0dfb2e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ba3adb3b7ccccb748a65932e0254e52ce092c5b5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ba56f0f804625c0ff8b7b119bd03af0a10b5886e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ba70f98f64f041290dd6794e5cbc9e8144c8c914" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "baf332c908b38d0c5e825b41a500525fa990b0cc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bb26680f6bb423720c6437fab35913d0a86e2a78" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bb7a0556525b43c750e380a0ac1ca3bb719e601c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bbdb82e2b1ebae617370e1c27542ea087a4fa937" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bc2929a7819bb70f10676f4bc004fff40ce5a52b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bc843b0159d8f7cf6fa1bda55e3ddcf78e1617b2" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bc845b8623c7af6b07eda7a5363298989cc007db" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bccf73dc6498406a51b4183e22c4be57de5c4975" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bd4f71cc4a8facf8612158e418fa394cabef27b7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bdb0e729f9136a166efc4ddea366fc3b6bf6bf5c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bdd290243af494ef27e986a3cc432ba3f873758d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bddd1619fd3c4703733b1648b7db0ffa6dd09a19" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bea830535682332041ad318232044f5e914af083" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "becf51bad165c4b8544ecc57c7859ee946e610df" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bed1a42fdb56c7d562a773650bb2785737caca3b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bf36bc1d23eebe66f84a0f119552dc7b46fe2402" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "bf574eebdcc7ff3617200fe07c8c7154a8d129f4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c052f8b19df2c41d807bde1c041a8ba2e87f15d5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c06bd5d93ac2ecab95942d1639b700e3a2cc48b8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c071690916c15657eba376c7c6b4b06d38e815be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c07b721215b231d9820dc8d186e3dcabc6c75e66" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c0cbd80b185007c05f50e6f2fbb03e8d6b2ed652" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c0f36c8efba9e6e4e677faab240ccf0cf3e7d03d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c101a7eb0ac863e824eea705432530c65aa0c518" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c19f48a0a131e8b9f44989bbac80a30ffe2a2e4d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c1ab531ecade623c0c908c1fbf104fb8c647a37e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c1ff6275aeeeacd2c79dc02f8cd5cdb44a81e6be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c20cf04f10caa057314759a2908524925294efb3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c291bf92ff9bdc0e60f049e6a5b143b940658857" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c2a603dfbb0734c098e5b6b7c8a9b64bab11054e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c2afed79b83fc6b8d98802f52b1fea6648571ee7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c30727a70f64c82d0d8837f1b45b931ebf80b106" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c33582140ad3da6d7fde2c3c73d0530cbde93555" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c37a43e940dfb5baf581a0b82b351d48305fc885" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c37d1d79868b6a4c25db68301b8575ae4a8336fb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c3d826f0bcf2d353afaea99ec55eb9162438e315" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c4170be517e6c67a9e65dddb09220df58e547102" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c44e39eed84adf0c399a9d5af8d0053715d0f5f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c489e22b54124b98b17b68e7c38676efb81c1862" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c4be49d4dcee6efd96c35ddf346b969db9981091" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c57abf0b9724f82736bee2a05a9238a45de5512a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c5a28cdc8c4b089c87ed4938ed4718253c48dd7a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c5c5d6ad672b24a2ddedbd2418c4c131c212cb0f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c608a6fa0f9f3a6af68270740ed6c998e145eede" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c694bd4edd4e806b9c7d4ad742a3be423391470b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c71253e1b049c2b5acba1893c74007a26797e111" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c71abd039da56d4c1d783ed06a48adf0808e9cef" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c775193c9d81ed6ee806f6005a874b927e96ff19" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c7e31a320a9a7969a6f4c3cf98bd6d92a6119055" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c82d5a989ed7c8ffdf79ea0724b3c9ba3fb84e57" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c8732f022b6c57d291b26c830c651b3617c75b2a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c8b331eb5ad444567964f34dc24757bdd3425943" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c8c3cf855531e1d06c07245e76c5298b4fc90d8a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c8c90ba51e74ac5d9e462ffcafbb6df11795ebe5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c8ca05f5e8391cd5004c3c4020e570ed4a520c20" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c9113ae38fc632738ad4722046d8e07ba9363ca7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c95ee3b530d4b057840c2d9cb542a51e4e3a00cd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "c98b82b246d3eca7562ae19d8ca605e77cd53a3a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "caf720d275e228b58bcd8b2686714ed8819cdc2b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cb0ef5a0d3f9427d66aa2b00d4b25c2445d96cf1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cb5e208c02a68f2d97601da482c419af989e097f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cc0302264a5d0f269e26ca3ac24d7695b562b4f4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cc40f2616fb396bfc25e9b22ba3218b2b217ea3d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cc7c2f8a3070489cfca48f5fa0db9fa2d65e40e4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ccc8cd23dc6755bbb516af6ef2a04cc82a5ce5c7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ccce4f34ac3a550c95747823a00fecce349734f7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cce1e6f23dccba1aa1830b1b7714fe985f9f2032" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cd1171381ba62ff31b56a001b8144e64e365eba1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cd2910fb9ae3395ed149b28a1ce7c3cc58bc5481" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cd5fca46bbc468b84b493f7b52ff50386b174d40" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cdc1f2aa2853b37723f415aeb181583e11ae7b8f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cdcc86f0d7e95ea5b2f9f5e802015c8ff855b257" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ce20ac750c9549b466d48c90352a255f6b7c8294" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ce7600131bfe22040ad75febed54cd4ad181276d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cebebe455b6a15d2e4705ebe51fe5007afda76eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cedbc4eaa94298536ad368e8ac9819c5e7448738" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ceee86e99b04198c09fc8ebf3e2f45253bddeed5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cf3f58bfe41401084fd1e997e8e36dfb35e363cc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cfb0d9c00c0b7ad292f221584394a3ae7d30e0ab" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "cfb86844738d5373ad23eb3185e1e9fc5d517ae6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d032f83c65a584f6e47f9fff9bc864d51a164a94" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d09a49b1cdb208e2504486267ca2418c87152962" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d0a97217cb0a4211e28a58222c1b038c44a3f211" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d10afb219e80a211c9072b18de0ff2317f67e573" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d111da05d7193bc295a4956543810071fcbe4238" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d19b2ebcfea3994bf30a7e4283b73d4bdd319cbb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2468d6da54259507d07f74ef0a246f97e52f035" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d25b7ae72c049f91091a4abedc4d618e5a05e1e0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d269786262f853ed769ef3ea9a7e5b98db3bfb32" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2a0b130c0834eb0ad2717ad13233242280a6fd0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2be9413f150b2eaf2666b42ee719fc66e5066f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2c8bda3e1481b96b4a3ee0a2e1f3f1aa6299feb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2e450aa145ce97dc054b1bcf391407fbf202bd5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d3a4f3cc7113eb16572eced68ab395a40ceeda1c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d3ba8bc2aa219ba0aacc8960b92832c3b0693bac" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d3c1c3359ed1906851379272964b7d96e2977654" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d49825eca3314ad0c5918472615055010cf4a4fa" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d49daab5099319cdda477f5ba715ae685c031db7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d5144e55ee02feec18f2ff293f08b8379d1509d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d577d44f2748e151afdb1ded254c942ca9933b0b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d65386ce109ffa3570dd27e54f32e2528fe01fc3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d7409d185224a0284e7451923e3d094ec309ef92" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d743161f0f7beed30155e171b4d577d5ce2a70d3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d758e9a701769fe9e5a80b3a09180e7631866f55" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d79995f1fbdf19beff429a94fa9dd184827c68c4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d7a36da4e6e26a99b038e34a6eb74d10d422ba9f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d7ae2e59d0776d0ba96fb4b23d1eccb3d57a14eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d80ba0ac6edb71367c1634ae5bf72970e596a99c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d87693ae6d35928467daf90aac749654e9c57644" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d9860a22b84f982363ab9684d767a347a5c4fb74" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d99befc655ecd5df508569aaadd729af7371687e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d9d8272a3b205f71494f9009705f4f30dd31c607" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d9dd1aa8519580888c402dd4fae66ca68b4a7b47" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "da1849a4f9df2e58d30c94732ff5f3aea19ccd8d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "da3580da73b2986fe0da9b6caebe17818b7b3645" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "da5828cee8e61bd0d8af71ef5da9a7a9019ade13" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "da7555a43e7a3790290cd20a19ec19032e28a6dd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dae44ad9bfab81783c1dd591ebe3409fa8967883" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "db06ebb361ef006c17f89ad92165185a38f6e630" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "db4ed990c69c3b67a04a96ccf079649facb9c433" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "db58d0b35d26edeb0efcb49f7eb627cf49bb3a47" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dba37eb3483100bc89a7bf11b7f110ad71ecf41c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dc19c28fa6124ee9d0688d0e2879f1269b4b7fc5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dc1baaa8621b513d62e8aeb02543ce5c7b8020c0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dc280f2887ea315f70692eb247e399b18a07bda8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dce512ecde5a4c27da464f846e71c8272da4ad80" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dceb9854f220556f595bd655bf6c023457341e4a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dd0eda6e9a3dccc3d430e5dd333c83b759cc7883" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dd8317eb76e8949315e601fa8a6959e2ffd277c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ddb6aeb5e1bb4cdb44ca3a9b979996c529d9fa3c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dddb23bf0a55d0197810e062a5a24a1503705ae5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dddda651d375f5352d2ff488eace1de63b6ffca9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dde0b1e9b9ecc980c5614012f9afae25cb1a1c16" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ddfb1c855ea2b2f198d2b6c7dc8ea0ee16d7319a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "de63eef4b269d8572b6b00574ad8e34c471a07d6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "def94fccb1b7dfbe1cf0b3dcaa03a77cf58ae768" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "df50b2ca876e4174d276dac0c64e644cb1b5a118" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "df5767dc4d8111e8641198f637e4423c62e57e27" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dfc26965c20fea217850a28c08021f1468146101" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "dfeb403cff0aabe20cb07d8451caacfe31260132" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e026a4835edf27c2705c97f237e5b59b7b5da1f7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e059d3aac9a568120467ddbba3e4d25bbc82dc64" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e089f14df5e00aff3b03cac5e1236f5cf5832d5f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0a1885b4057f65dc75636f4fb0e4b57da82429c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0b3647d7252d53d397fa6af6d9da4749f4caadf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0e5744863b26418baf12f94f0bdad2ef2546a92" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0e8eb511c8a93cbc42dec4e3c0b8492ca1d81f4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0f04368af17d56c8cdb50f0fd5f1847d9a49cb1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e0fbdd03e0e490770d671965ccce5f5ed42bbb9d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e134cc9b2be1a15b9e270a9f7baacbda3c8b3659" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e14b8b08ed9b569d2945b078fe94225924c5987e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e1954d1413f4f50c7bb3aa0ee368b94dfeae7c1b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e19f216f6b8b78ff1e705cb56d0cb07db60a05ec" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e1e31732ce0075070c8d7e2ef7a44b93949493d0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e1f79aa1d6477ffd08d4e5ce185637434147e4f8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e21b2668bb1e9cf057606c44d49648f1c140aa76" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e24778b9ec00cc9bef91643e31885deee719207e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e28a959abf1b36ad7778737d992690cb73a51a91" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e292ba16ee32e94ba88b4b72821bf90fe7b1b845" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e2982af9c977c39cb4633346b916a3897ffeb6f9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e326d4acceedb3e572b98d4a45a6f1e37ee42501" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e32bec776748185042cb02d58fad1d5027bbaeff" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e3443d812bb8204255a1d249b82aa19508dff5c9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e355b484879e20943aca2c6655953ec8121b64e8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e365d9256480b1e9d3cc6eafdcad5912b75ad149" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e3d08fe78f595bede290f820ec0e878572803a6a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e4028c8f2888697e9939562de475f70a841ee713" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e475b2b441a9b1cdf24e0ea992dfaecedd58d6d0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e49d92946422e69977a94d1b4b769f97efcfb8eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e50c29688b2c3dbe6633797d2a200ed7c2cb1cba" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e59b406835db0d4c63ae28072c64c664da637557" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e5baf7303b008f333c57491345e604d52fce0d63" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e5fa8de537f7665e2aed751b8ca7c6b5bf0cdca0" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e635349c1e038d62f774f4201cbda082b8af403c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e64dff0ba3f0eb9e054a638d4d5f6f0cb47e1e98" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e6df36db61ae2c46d2cda2f6c8d1856ac181e6cc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e6f12dc0baf6536aa75f226bfb0262d8266433d1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e703236fc6d1dcc955b9abf34f490e2bf5057fdd" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e71d6b1facc3de5c246f7d14e35a2b4a2d983c11" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e74299a026e8a481c1db07e6065ca30af9858cbc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e75900e645ce8d1abbb97d408989b159b2a50a1c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e7b8aae66ff70d59fcc5a8b4de5a246081547146" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e81f08cfb60f7c156cf7dcbee1b8790901a1eadc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e8373e7e464120da8a84da82c8137872cda65780" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e857a6c6f502dd2bd0ec341b2d4ed55f2e87e8e7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e908278cc1515f214049c48c3a8908524f2cc407" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e913f5b697154f99bfc159a132c6c253b457ef18" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e93e7128f80bef53e3217782f21f4bd6a6d19c7c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "e9d157e81c306452f8494f681813037b146660eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ea186a9a4815581b71403480abae5cc7c57c00be" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ea216bc75a65a838ea3d63f7c05588c2840ec1ab" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ea2f1211c66cdabf2b618a4dd965ce133592763b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eadf36b1baf942879b0b5c45469fa05add1d61b3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eb203eec55c1da2fd38977032c79ada414cc914c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eb4e97f22f12995949c371f2df690f68f71070eb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eb5ad2481a57a6b7ede3a16ad8bfe2991eef3ad7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eb9414a32f85461cf4ac7c9c73761f3f1e5ab14e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ebff1a1539630b2f7b5260a93ea602372e539366" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ec184f693f222b3e48622f5253c134339e7e2e7d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ec318906ab052a41ef13ea33deee554704a307c1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ec45f260d4d758d6d23ae0297a9516190d935a5b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ec5f2ac1947c51c5982eb0ab63d1e6439f45c2e3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "eca2fc261f07a269c2487e6d1b0539d0950ff792" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ecb643ddbca1cfa6dd22964c20ef57ab47c0fda9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ecd38089d14a75b93afa634276bbe8965f5642dc" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ece9d0b9393f64338ec6ca5b0efbcec2175f19ec" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ed1a5e97e3415b484e6bc8b84bd170dbdd879cb3" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ee21d08004e0b6f2c1cd4bcb2a04ab74f7b7b708" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ee439948c6dead863ab2ba9105b70916d45f9e79" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ee6f3914a1e5d955fd62a29562ee0ab776235ff5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ef36b064bb706bc0540e4ed2b341ae8a0b7756b7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "efe2a6d8859b14ecc69baf66dcd47f4067df18e5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f00d30ecf763691115d2314d14ea1e11f61ad874" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f026ce3f255ef9fc7b93719a3f6926ce4953bfe1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f07ee5b0729c565f7b57995a108f94e4fcb81558" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f0dc197380bc632e5078f75f5ef0b814b7eb2ec6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f12be871bc1a1f3ca254eb027786085dd79494c5" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f134cf7fd6ed2e962db26c4b3d99ee5884102c85" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f191a9c00fe780f63cf4f68a06e895bd53981254" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f1970ea5af8456fee42cc087e79bd5c6a6efaa87" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f1ba5e0a4a27d8dafcf87f049b178fe83574ac06" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f25da1517af0e2fce2b9d75fd964e8827cc0cb72" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f2866fb67103c69f10edaed228d2dd64b7e6df83" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f2d3cbe7357ee858c2b7f6ea28fc95c1af508ca8" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f2d923a66a9684f2268530094ce8e3f8b8cae52e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f3b37fd9258f2c883c44e8ddaa90f91bfe9f5d51" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f3c5a341248911dda9d694ee74bf997365941dbf" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f4489af2af8424c6edf0d0adc525680dea208a31" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f475a28a9649aa00ab8a40af393f1961587c2275" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f48270bfa988db4518f9b1db9e78bb398c954550" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f49ecf0e4378b1957686d8d0b227f83e48e5523c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f4a32ec7fde64e7d3ceb53fcc00511ffe13ff5d4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f4d2d03bf70c2500fe431fdc8fbed2c13437bdc9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f4e76b020a22e8c1929ba2163e413385fc0cf884" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f53e504312e2ff787bbb9ba4ea921e9edb7b18ff" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f5472ede25cb83dc2fe392b01111133b777709b9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f619381383c69659fe81a10d695b2663426624d4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f62f676443b29c513964f01cbb356165ace54b78" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f6ee7d8bf313f837bbfed7f10b16fb2f182fd416" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f735071cbee190d76b704ce68384fc21e389fbe7" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f74f956ea3d122e47f4aa0066b5e3605c80d0282" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f783f583fc06d2c88e9e0d263a6ab66f8b8a0514" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f78b2d97c8af245b705c0a19601b95f983e9aaf6" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f78ff2d350615b858077a50ff85b3a9e2edcc995" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f85aaa082ae886506141245ea3b43ee74babca65" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f86c50909ddce25f4d4e71e16d78b2f6a244e8cb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f8e4de2f36fa5e9861fe3af86d05db4cae1bb1a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f8fc32491119dea2b7fda5080ef9cf0027590265" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f904cb6a599db50cc635bb70f3c23f056e39914e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f94e8e9f1511f8cede3bfd8e1be0db35085e8e6d" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f9c7db4a48b918ad6e44d2b55e2339fdcde01d26" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "f9d417c0b18ff731a88a17f3b31d9d6ed1e288f1" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fa849bc1ece08222f4bf249ca06a6468b3de5b1a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fa9c2ac45638e511b06ebe051411ebdc2c4c228a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fabaccc45975d14c53b830fd4fa0576da541d22e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fac000880bdfdbd780ffa7c4a1d5d8b4a1d87b03" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fafa31e9b477adf7a26b651aa9913f8664e536a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fb04fd4e715c760c91ddc0f30b000b52203f66a4" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fb5d7c75f272b07450867579978314661c3e1206" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fbdc8132551b0ed5c50b6c0f279097592b5c87ef" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fc55e6958f11444ae56c09af726f2ec57525db58" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fc70ade160bd76694149f3f439f5d4f78bdc483e" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fc86915f4e8884b49adeb6f23a8f69e643d9db7b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fcdb751de1dc7c5246ce698b4b104016d034cfdb" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fcf47e5c1414303d55afc40c75c41cf42079d560" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd096ec4540dacfebbabf2dd6ffd3493a09cc38f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd09bf9b58980d6a5776bb391d8c6881bcca2ae9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd0dea1a583400fc29051c8192b70022d8d92c48" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd437bf9d51bac3a2757bf4b8bf38045e78d5ada" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd5b134edd8931ca2102693d88070dd49fc13350" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fd91b246a065cde3fc10edd6457b9e6c10fb386f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fdc6c80a86ea555b5de26c3db49a779eea6beb0c" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fe4f48d16a7ec27241b987f3545423291c7cce77" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fe686acb3b7cc09ec6379af828b4b3b638898130" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fe8d768de7a723c23583162dbef207b6dcb4fb58" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fed73d1755549bd523a775e81cf80a1a507eec50" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ffb9bfb24fb671413a3aae05e0f21b870eeb2ab9" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "ffc4569dfb86db2e584a1138a75747dffb794466" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "fff1cd2c481ce0fba0c97ef77c79227d3b67832a" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x60206000600039602060006000f0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "465224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stRefundTest.json b/tests/files/StateTests/stRefundTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..08ae1fac837b068c78e73d6c8fc4a0a3191f34d5
--- /dev/null
+++ b/tests/files/StateTests/stRefundTest.json
@@ -0,0 +1,523 @@
+{
+    "refund500" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600154506002545060ff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0a" : "0x8000000000000000000000000000000000000000000000000000000000000000",
+                    "0x0b" : "0x0de0b6b3a7640000"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "592",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9408",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600154506002545060ff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01",
+                    "0x02" : "0x01",
+                    "0x03" : "0x01",
+                    "0x04" : "0x01",
+                    "0x05" : "0x01",
+                    "0x06" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund50_1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006001556000600255600060035560006004556000600555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "255",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9745",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006001556000600255600060035560006004556000600555",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01",
+                    "0x02" : "0x01",
+                    "0x03" : "0x01",
+                    "0x04" : "0x01",
+                    "0x05" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund50_2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600a556001600b5560006001556000600255600060035560006004556000600555",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0a" : "0x01",
+                    "0x0b" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "614",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9386",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600a556001600b5560006001556000600255600060035560006004556000600555",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01",
+                    "0x02" : "0x01",
+                    "0x03" : "0x01",
+                    "0x04" : "0x01",
+                    "0x05" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund600" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600154506002545061ffff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0b" : "0x0de0b6b3a7640000"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "492",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "9508",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600154506002545061ffff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01",
+                    "0x02" : "0x01",
+                    "0x03" : "0x01",
+                    "0x04" : "0x01",
+                    "0x05" : "0x01",
+                    "0x06" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund_NoOOG_1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "402",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "502",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "502",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund_OOG" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "500",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "500",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "500",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "0"
+        }
+    },
+    "refund_changeNonZeroStorage" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000010",
+                "code" : "0x6017600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x17"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "602",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "388",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "850",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "10"
+        }
+    },
+    "refund_getEtherBack" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000010",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "402",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "588",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "850",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "10"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stSpecialTest.json b/tests/files/StateTests/stSpecialTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..91b51fdb0bc0b58cb9d5aedc26c0161ec3ea8e7a
--- /dev/null
+++ b/tests/files/StateTests/stSpecialTest.json
@@ -0,0 +1,77 @@
+{
+    "makeMoney" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000010",
+                "code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "850",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "140",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600160015532600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600160015532600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "850",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "10"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..612331ae3619630c4e410e266a7e72c857448e6f
--- /dev/null
+++ b/tests/files/StateTests/stSystemOperationsTest.json
@@ -0,0 +1,5830 @@
+{
+    "ABAcalls0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099999",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e8f15855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x23" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1658",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "24",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876101f4f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x26" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898342",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e8f15855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876101f4f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "ABAcalls1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099481",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f15855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x25" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "131292",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "542",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x28" : "0x02"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999768708",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f15855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "ABAcalls2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099488",
+                "code" : "0x6001600054016000556000600060006000600173945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0200"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "8997504",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "512",
+                "code" : "0x6001600054016000556000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0200"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999990902496",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600054016000556000600060006000600173945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "0",
+                "code" : "0x6001600054016000556000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "ABAcalls3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1124488",
+                "code" : "0x6001600054016000556000600060006000600173945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0200"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "8997504",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "512",
+                "code" : "0x6001600054016000556000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0200"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999990902496",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1025000",
+                "code" : "0x6001600054016000556000600060006000600173945304eb96065b2a98b57a48a06ae28d285a71b56103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "0",
+                "code" : "0x6001600054016000556000600060006000600073095e7baea6a6c7c4c2dfeb977efac326af552d876103e85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "ABAcallsSuicide0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1659",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000100023",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876101f4f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x26" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898341",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e8f1585573945304eb96065b2a98b57a48a06ae28d285a71b5ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876101f4f16001015855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "ABAcallsSuicide1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099999",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e8f15855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x23" : "0x01"
+                }
+            },
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "24",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1659",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898341",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000601873945304eb96065b2a98b57a48a06ae28d285a71b56103e8f15855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6000600060006000601773095e7baea6a6c7c4c2dfeb977efac326af552d876101f4f16001015855730f572e5295c57f15886f9b263e2f6d2d6c7b5ec6ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBomb0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20099977",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "72167",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0118",
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999827833",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBomb1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03ff",
+                    "0x01" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "261077",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999638923",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365223",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBomb2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03ff",
+                    "0x01" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "261078",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999638922",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "365224",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBomb3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20100000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0400",
+                    "0x01" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "895752",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999004248",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBombLog" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20099977",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "76859",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xea",
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999823141",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallRecursiveBombLog2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001869f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001842d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000018283",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000180d9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017f2f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017d85",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017bdb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017a31",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017887",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000176dd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017533",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017389",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000171df",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000017035",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000016e8b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000016ce1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000016b37",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001698d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000167e3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000016639",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001648f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000162e5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001613b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015f91",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015de7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015c3d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015a93",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000158e9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001573f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015595",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000153eb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015241",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000015097",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000014eed",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000014d43",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000014b99",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000149ef",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000014845",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001469b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000144f1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000014347",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001419d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000013ff3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000013e49",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000013c9f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000013af5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001394b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000137a1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000135f7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001344d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000132a3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000130f9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012f4f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012da5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012bfb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012a51",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000128a7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000126fd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012553",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000123a9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000121ff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000012055",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011eab",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011d01",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011b57",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000119ad",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011803",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011659",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000114af",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000011305",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001115b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010fb1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010e07",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010c5d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010ab3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010909",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001075f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000105b5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000001040b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000010261",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000100b7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000ff0d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000fd63",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000fbb9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000fa0f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f865",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f6bb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f511",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f367",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f1bd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000f013",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000ee69",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000ecbf",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000eb15",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e96b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e7c1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e617",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e46d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e2c3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000e119",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000df6f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000ddc5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000dc1b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000da71",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d8c7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d71d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d573",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d3c9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d21f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000d075",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000cecb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000cd21",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000cb77",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c9cd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c823",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c679",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c4cf",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c325",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000c17b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000bfd1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000be27",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000bc7d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000bad3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b929",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b77f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b5d5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b42b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b281",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000b0d7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000af2d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000ad83",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000abd9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000aa2f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a885",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a6db",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a531",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a387",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a1dd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000a033",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000009e89",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000009cdf",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000009b35",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000998b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000097e1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000009637",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000948d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000092e3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000009139",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008f8f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008de5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008c3b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008a91",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000088e7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000873d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008593",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000083e9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000823f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000008095",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007eeb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007d41",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007b97",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000079ed",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007843",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007699",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000074ef",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000007345",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000719b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000006ff1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000006e47",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000006c9d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000006af3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000006949",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000679f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000065f5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000644b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000062a1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000060f7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005f4d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005da3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005bf9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005a4f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000058a5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000056fb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005551",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000053a7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000051fd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000005053",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004ea9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004cff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004b55",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000049ab",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004801",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004657",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000044ad",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004303",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000004159",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003faf",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003e05",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003c5b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003ab1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003907",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000375d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000035b3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000003409",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000325f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000030b5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002f0b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002d61",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002bb7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002a0d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002863",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000026b9",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000250f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002365",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000021bb",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000002011",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001e67",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001cbd",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001b13",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001969",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000017bf",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001615",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000146b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000012c1",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000001117",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000000f6d",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000000dc3",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000000c19",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000000a6f",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000008c5",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000071b",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x0000000000000000000000000000000000000000000000000000000000000571",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x00000000000000000000000000000000000000000000000000000000000003c7",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
+                "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x000000000000000000000000000000000000000000000000000000000000021d",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20099977",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "76859",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000023",
+                "code" : "0x5a60005260206000a0600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xea",
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999823141",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "20000000",
+                "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x5a60005260206000a0600160005401600055600060006000600060003060e05a03f1600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistrator0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1165",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "46",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                    "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898835",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorNotMuchMemory0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000620f120660406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1165",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "46",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                    "0xeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00" : "0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898835",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000620f120660406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorNotMuchMemory1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa602052600060406000620f1206601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "965",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "46",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899035",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa602052600060406000620f1206601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorOutOfGas" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56064f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "736",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "46",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899264",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56064f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorTooMuchMemory0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa602052600060406040633ade68b1601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999890000",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa602052600060406040633ade68b1601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorTooMuchMemory1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa60205260006040629688d86000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999890000",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa60205260006040629688d86000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToNameRegistratorTooMuchMemory2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526001620f120660406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999890000",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7feeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526001620f120660406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "CallToReturn1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1145",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "46",
+                "code" : "0x6001600155603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898855",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f1600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6001600155603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "PostToReturn1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526080",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "509",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x603760005360026000f2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899491",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526080",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x603760005360026000f2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "TestNameRegistrator" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                    "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1149",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898851",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "callcodeToNameRegistrator0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f2600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01",
+                    "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" : "0xaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1165",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898835",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f2600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "callcodeToReturn1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f2600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01",
+                    "0x01" : "0x01"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "1145",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6001600155603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999898855",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f2600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6001600155603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "callstatelessToReturn1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526080600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "810",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6001600155603760005360026000f2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899190",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526080600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "945304eb96065b2a98b57a48a06ae28d285a71b5" : {
+                "balance" : "23",
+                "code" : "0x6001600155603760005360026000f2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "createNameRegistrator" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000099977",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046017f0600055",
+                "nonce" : "1",
+                "storage" : {
+                    "0x" : "0xd2571607e241ecf590ed94b12d87c94babe36db6"
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "997",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899003",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+                "balance" : "23",
+                "code" : "0x60003554156009570060203560003555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046017f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "createNameRegistratorOutOfMemoryBonds0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c650fffffffffff6017f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999890000",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c650fffffffffff6017f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "createNameRegistratorOutOfMemoryBonds1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052650fffffffffff60046017f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "10000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999890000",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052650fffffffffff60046017f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "createNameRegistratorValueTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046103e8f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046103e8f0600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "10000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "return0" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x37",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "100023",
+                "code" : "0x603760005360016000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "507",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899493",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "23",
+                "code" : "0x603760005360016000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "return1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x3700",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "100023",
+                "code" : "0x603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "507",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899493",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "23",
+                "code" : "0x603760005360026000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "return2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x370000000000000000000000000000000000000000000000000000000000000000",
+        "post" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "100023",
+                "code" : "0x603760005360216000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "508",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899492",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "23",
+                "code" : "0x603760005360216000f3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "suicideAddress" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "803",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899197",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3060005530ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "suicideCaller" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "803",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1999999999999999197",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3360005533ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "suicideNotExistingAccount" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "501",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899499",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            },
+            "aa1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x73aa1722f3947def4cf144679da39c4c32bdc35681ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "suicideOrigin" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "803",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1999999999999999197",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3260005532ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    },
+    "suicideSendEtherToMe" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "10000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "501",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "999999999999899499",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x30ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "1000000",
+            "gasPrice" : "1",
+            "nonce" : "0",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+            "value" : "100000"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/StateTests/stTransactionTest.json b/tests/files/StateTests/stTransactionTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..0de85079799286498760bfdd5e1a300187510f3c
--- /dev/null
+++ b/tests/files/StateTests/stTransactionTest.json
@@ -0,0 +1,277 @@
+{
+    "EmptyTransaction" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "",
+            "gasPrice" : "",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : ""
+        }
+    },
+    "TransactionFromCoinbaseNotEnoughFounds" : {
+        "env" : {
+            "currentCoinbase" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1100",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "600",
+            "gasPrice" : "1",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+            "value" : "502"
+        }
+    },
+    "TransactionSendingToEmpty" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "500",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "99500",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "500",
+            "gasPrice" : "1",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "",
+            "value" : ""
+        }
+    },
+    "TransactionSendingToZero" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0000000000000000000000000000000000000000" : {
+                "balance" : "1",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "500",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "99499",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "5000",
+            "gasPrice" : "1",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "0000000000000000000000000000000000000000",
+            "value" : "1"
+        }
+    },
+    "TransactionToItself" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+                "balance" : "500",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "99500",
+                "code" : "0x",
+                "nonce" : "1",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "100000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "5000",
+            "gasPrice" : "1",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+            "value" : "1"
+        }
+    },
+    "TransactionToItselfNotEnoughFounds" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "45678256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : 1,
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1101",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+                "balance" : "1101",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "transaction" : {
+            "data" : "",
+            "gasLimit" : "600",
+            "gasPrice" : "1",
+            "nonce" : "",
+            "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+            "to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
+            "value" : "502"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/TODO b/tests/files/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..91d0f358b5705fbd843b7340c22351dbdd008a51
--- /dev/null
+++ b/tests/files/TODO
@@ -0,0 +1,21 @@
+- Move over to standard and clear JSON format:
+
+All files should be of the form:
+
+{
+	"test1name":
+	{
+		"test1property1": ...,
+		"test1property2": ...,
+		...
+	},
+	"test2name":
+	{
+		"test2property1": ...,
+		"test2property2": ...,
+		...
+	}
+}
+
+Arrays are allowed, but don't use them for sets of properties - only use them for data that is clearly a continuous contiguous sequence of values.
+
diff --git a/tests/files/TrieTests/trieanyorder.json b/tests/files/TrieTests/trieanyorder.json
new file mode 100644
index 0000000000000000000000000000000000000000..ebf5fbff0ab58c664f27bd9f2b926de3b0287f4d
--- /dev/null
+++ b/tests/files/TrieTests/trieanyorder.json
@@ -0,0 +1,55 @@
+{
+  "singleItem": {
+    "in": {
+      "A": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+    },
+    "root": "0xd23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab"
+  },
+  "dogs": {
+    "in": {
+      "doe": "reindeer",
+      "dog": "puppy",
+      "dogglesworth": "cat"
+    },
+    "root": "0x8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"
+  },
+  "puppy": {
+    "in": {
+      "do": "verb",
+      "horse": "stallion",
+      "doge": "coin",
+      "dog": "puppy"
+    },
+    "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84"
+  },
+  "foo": {
+    "in": {
+      "foo": "bar",
+      "food": "bat",
+      "food": "bass"
+    },
+    "root": "0x17beaa1648bafa633cda809c90c04af50fc8aed3cb40d16efbddee6fdf63c4c3"
+  },
+  "smallValues": {
+    "in": {
+      "be": "e",
+      "dog": "puppy",
+      "bed": "d"
+    },
+    "root": "0x3f67c7a47520f79faa29255d2d3c084a7a6df0453116ed7232ff10277a8be68b"
+  },
+  "testy": {
+    "in": {
+      "test": "test",
+      "te": "testy"
+    },
+    "root": "0x8452568af70d8d140f58d941338542f645fcca50094b20f3c3d8c3df49337928"
+  },
+  "hex": {
+    "in": {
+      "0x0045": "0x0123456789",
+      "0x4500": "0x9876543210"
+    },
+    "root": "0x285505fcabe84badc8aa310e2aae17eddc7d120aabec8a476902c8184b3a3503"
+  }
+}
diff --git a/tests/files/TrieTests/trietest.json b/tests/files/TrieTests/trietest.json
new file mode 100644
index 0000000000000000000000000000000000000000..ce5c2d191bae774713f7ebd6dd8b15ec20cf228d
--- /dev/null
+++ b/tests/files/TrieTests/trietest.json
@@ -0,0 +1,31 @@
+{
+  "emptyValues": {
+    "in": [
+      ["do", "verb"],
+      ["ether", "wookiedoo"],
+      ["horse", "stallion"],
+      ["shaman", "horse"],
+      ["doge", "coin"],
+      ["ether", null],
+      ["dog", "puppy"],
+      ["shaman", null]
+    ],
+    "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84"
+  },
+  "jeff": {
+    "in": [
+      ["0x0000000000000000000000000000000000000000000000000000000000000045", "0x22b224a1420a802ab51d326e29fa98e34c4f24ea"],
+      ["0x0000000000000000000000000000000000000000000000000000000000000046", "0x67706c2076330000000000000000000000000000000000000000000000000000"],
+      ["0x0000000000000000000000000000000000000000000000000000001234567890", "0x697c7b8c961b56f675d570498424ac8de1a918f6"],
+      ["0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x1234567890"],
+      ["0x0000000000000000000000007ef9e639e2733cb34e4dfc576d4b23f72db776b2", "0x4655474156000000000000000000000000000000000000000000000000000000"],
+      ["0x000000000000000000000000ec4f34c97e43fbb2816cfd95e388353c7181dab1", "0x4e616d6552656700000000000000000000000000000000000000000000000000"],
+      ["0x4655474156000000000000000000000000000000000000000000000000000000", "0x7ef9e639e2733cb34e4dfc576d4b23f72db776b2"],
+      ["0x4e616d6552656700000000000000000000000000000000000000000000000000", "0xec4f34c97e43fbb2816cfd95e388353c7181dab1"],
+      ["0x0000000000000000000000000000000000000000000000000000001234567890", null],
+      ["0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000"],
+      ["0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000", "0x697c7b8c961b56f675d570498424ac8de1a918f6"]
+    ],
+    "root": "0x9f6221ebb8efe7cff60a716ecb886e67dd042014be444669f0159d8e68b42100"
+  }
+}
diff --git a/tests/files/TrieTests/trietestnextprev.json b/tests/files/TrieTests/trietestnextprev.json
new file mode 100644
index 0000000000000000000000000000000000000000..f2ad924e30acf534794599e95115b20049acffd8
--- /dev/null
+++ b/tests/files/TrieTests/trietestnextprev.json
@@ -0,0 +1,19 @@
+{
+    "basic": {
+        "in": [ "cat", "doge", "wallace" ],
+        "tests": [
+            [ "", "", "cat" ],
+            [ "bobo", "", "cat" ],
+            [ "c", "", "cat" ],
+            [ "car", "", "cat" ],
+            [ "cat", "", "doge" ],
+            [ "catering", "cat", "doge" ],
+            [ "d", "cat", "doge" ],
+            [ "doge", "cat", "wallace" ],
+            [ "dogerton", "doge", "wallace" ],
+            [ "w", "doge", "wallace" ],
+            [ "wallace", "doge", "" ],
+            [ "wallace123", "wallace", ""]
+        ]
+    }
+}
diff --git a/tests/files/VMTests/RandomTests/randomTest.json b/tests/files/VMTests/RandomTests/randomTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..dad2ee4a2264c24b2e13eceabc6027e05a10b866
--- /dev/null
+++ b/tests/files/VMTests/RandomTests/randomTest.json
@@ -0,0 +1,46 @@
+{
+    "randomVMtest" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x675545",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9999",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x675545",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x675545",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmArithmeticTest.json b/tests/files/VMTests/vmArithmeticTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..88d209dfaf5e835c77e6009b755b08f7a54e0953
--- /dev/null
+++ b/tests/files/VMTests/vmArithmeticTest.json
@@ -0,0 +1,3261 @@
+{
+    "add0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "add1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "add2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "add3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600001600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600001600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600001600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "add4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026002600108600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600108600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600108600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026002600003600160000308600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600003600160000308600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600003600160000308600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600660000308600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod2_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600660000308600360056000030714600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9887",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600360056000030714600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600360056000030714600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod2_1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600660000308600360056000030614600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9687",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600360056000030614600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600660000308600360056000030614600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036000036001600408600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036000036001600408600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x05"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036000036001600408600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "addmod3_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026003600003600160040814600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9891",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026003600003600160040814600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026003600003600160040814600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "divByNonZero0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600504600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600504600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600504600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "divByNonZero1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6018601704600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6018601704600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6018601704600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "divByNonZero2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6018600004600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6018600004600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6018600004600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "divByNonZero3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600104600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600104600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600104600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "divByZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600204600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600204600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600204600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600260020a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260020a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x04"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260020a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9664",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x637fffffff637fffffff0a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x637fffffff637fffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xbc8cccccccc888888880000000aaaaaab00000000fffffffffffffff7fffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x637fffffff637fffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x637fffffff60000a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x637fffffff60000a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x637fffffff60000a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000637fffffff0a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000637fffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000637fffffff0a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60016101010a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60016101010a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0101"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60016101010a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x61010160010a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61010160010a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61010160010a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "exp7" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x61010160020a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61010160020a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61010160020a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mod0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600206600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600206600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600206600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mod1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mod2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mod3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600306600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600306600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600306600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mod4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600260000306600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600260000306600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600260000306600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600202600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600202600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x06"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600202600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6017600002600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600002600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600002600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001601702600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001601702600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x17"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001601702600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x8000000000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mul6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026002600109600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9895",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600109600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026002600109600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036002600003600160000309600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9891",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600003600160000309600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600003600160000309600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600560000309600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod2_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600560000309600360056000030714600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9887",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600360056000030714600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600360056000030714600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod2_1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036001600560000309600360056000030614600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9687",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600360056000030614600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036001600560000309600360056000030614600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036000036001600509600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036000036001600509600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x05"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036000036001600509600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mulmod3_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026003600003600160050914600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9891",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026003600003600160050914600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026003600003600160050914600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdiv0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdiv1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdiv2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6004600003600260000305600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6004600003600260000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6004600003600260000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdiv3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600003600405600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600405600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600405600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdivByZero0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600003600360000305600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600003600360000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600003600360000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sdivByZero1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextendInvalidByteNumber" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x62126af460500b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62126af460500b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x126af4"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62126af460500b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_00" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600060000b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060000b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060000b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_0_BigByte" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_AlmostBiggestByte" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BigByteBigByte" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BigBytePlus1_2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff68f000000000000000010b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff68f000000000000000010b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff68f000000000000000010b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BigByte_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BitIsNotSet" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x62122f6a60000b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62122f6a60000b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x6a"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62122f6a60000b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BitIsNotSetInHigherByte" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x62126af460010b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62126af460010b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x6af4"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62126af460010b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_BitIsSetInHigherByte" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6212faf460010b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6212faf460010b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf4"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6212faf460010b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_bigBytePlus1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x66f000000000000161ffff0b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x66f000000000000161ffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xf0000000000001"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x66f000000000000161ffff0b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "signextend_bitIsSet" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x62122ff460000b600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62122ff460000b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62122ff460000b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "smod0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600003600560000307600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000307600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "smod1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600003600507600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600507600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600507600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "smod2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600560000307600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600560000307600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600560000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "smod3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "smod4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600260000307600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000307600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "stop" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x00",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x00",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x00",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sub0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001601703600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001601703600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x16"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001601703600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sub1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600203600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600203600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600203600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sub2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6017600003600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600003600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600003600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sub3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sub4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
diff --git a/tests/files/VMTests/vmBitwiseLogicOperationTest.json b/tests/files/VMTests/vmBitwiseLogicOperationTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..f72711995d030d16af9370eadb4255cc3a5093e8
--- /dev/null
+++ b/tests/files/VMTests/vmBitwiseLogicOperationTest.json
@@ -0,0 +1,2682 @@
+{
+    "and0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600216600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600216600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600216600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "and1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600216600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600216600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600216600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "and2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600316600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600316600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600316600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "and3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "and4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "and5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee16600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016000601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016000601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016000601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016001601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016001601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016001601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte10" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte11" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x67804020100804020160001a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x67804020100804020160001a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x67804020100804020160001a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016002601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016002601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x04"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016002601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016003601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016003601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x08"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016003601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016004601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016004601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x10"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016004601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016005601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016005601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x20"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016005601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016006601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016006601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x40"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016006601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte7" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016007601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016007601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016007601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte8" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x678040201008040201601f601f031a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x678040201008040201601f601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x678040201008040201601f601f031a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "byte9" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6780402010080402016020601f051a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016020601f051a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6780402010080402016020601f051a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "eq0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600003600560000314600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000314600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000314600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "eq1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600014600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600014600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600014600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "eq2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gt0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600260000311600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000311600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000311600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gt1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600003600011600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600011600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600011600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gt2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gt3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600011600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "iszeo2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6080600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "iszero0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6080600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "iszero1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6080600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6080600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "lt0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600260000310600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000310600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000310600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "lt1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600003600010600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600010600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600010600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "lt2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "lt3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600010600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600015600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600015600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600015600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600215600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9897",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600215600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600215600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9897",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600260000315600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9895",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260000315600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260000315600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000315600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9895",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000315600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000315600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "not5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600060000315600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060000315600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060000315600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600217600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600217600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600217600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600217600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600217600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600217600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600317600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600317600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600317600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "or5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee17600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sgt0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600260000313600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000313600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000313600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sgt1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600003600013600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600013600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600013600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sgt2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff13600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sgt3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600013600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sgt4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600003600560000313600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000313600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000313600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "slt0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600260000312600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000312600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600260000312600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "slt1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600003600012600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9894",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600012600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600003600012600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "slt2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "slt3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600012600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "slt4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6003600003600560000312600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000312600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6003600003600560000312600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600218600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600218600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600218600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600218600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600218600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600218600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6001600318600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600318600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6001600318600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xfedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x1111111111111111111111111111111111111111111111111111111111111111"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "xor5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x1111111111111111111111111111101111111111111111111111111111111111"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7feeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee18600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmBlockInfoTest.json b/tests/files/VMTests/vmBlockInfoTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..90fa77a3de73556a7740b4a20fc6b990700df3be
--- /dev/null
+++ b/tests/files/VMTests/vmBlockInfoTest.json
@@ -0,0 +1,271 @@
+{
+    "coinbase" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x41600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x41600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x41600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "difficulty" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x44600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x44600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0100"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x44600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gaslimit" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x45600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x45600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0f4240"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x45600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "number" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x43600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9898",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x43600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x43600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "prevhash" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x40600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x40600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x40600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "timestamp" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x42600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x42600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x42600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmEnvironmentalInfoTest.json b/tests/files/VMTests/vmEnvironmentalInfoTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..37563707b5ee834a9a263f012c2ee8c981c4368a
--- /dev/null
+++ b/tests/files/VMTests/vmEnvironmentalInfoTest.json
@@ -0,0 +1,1401 @@
+{
+    "address0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x30600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x30600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x30600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "address1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "caller" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "code" : "0x30600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x30600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xcd1722f3947def4cf144679da39c4c32bdc35681"
+                }
+            }
+        },
+        "pre" : {
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x30600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "balance0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x73cd1722f3947def4cf144679da39c4c32bdc3568131600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999878",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x73cd1722f3947def4cf144679da39c4c32bdc3568131600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x73cd1722f3947def4cf144679da39c4c32bdc3568131600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "balance1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x730f572e5295c57f15886f9b263e2f6d2d6c7b5ec631600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999678",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x730f572e5295c57f15886f9b263e2f6d2d6c7b5ec631600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0de0b6b3a7640000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x730f572e5295c57f15886f9b263e2f6d2d6c7b5ec631600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "balanceAddress2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x3031730f572e5295c57f15886f9b263e2f6d2d6c7b5ec63114600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999656",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3031730f572e5295c57f15886f9b263e2f6d2d6c7b5ec63114600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3031730f572e5295c57f15886f9b263e2f6d2d6c7b5ec63114600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "balanceCaller3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x333173cd1722f3947def4cf144679da39c4c32bdc356813114600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999656",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333173cd1722f3947def4cf144679da39c4c32bdc356813114600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "0",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333173cd1722f3947def4cf144679da39c4c32bdc356813114600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatacopy0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60026001600037600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x2345000000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60026001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatacopy1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60016001600037600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60016001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x2300000000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60016001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatacopy2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60006001600037600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006001600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatacopy_DataIndexTooHigh" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999877",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatacopy_DataIndexTooHigh2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999891",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldataload0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600035600055",
+            "data" : "0x0256",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600035600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0256000000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600035600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldataload1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600135600055",
+            "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600135600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600135600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldataload2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600535600055",
+            "data" : "0x0123456789abcdef0000000000000000000000000000000000000000000000000024",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600535600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xabcdef0000000000000000000000000000000000000000000000000024000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600535600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldataloadSizeTooHigh" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055",
+            "data" : "0x0123456789abcdef0000000000000000000000000000000000000000000000000024",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999897",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatasize0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x36600055",
+            "data" : "0x0256",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatasize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x36600055",
+            "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x21"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "calldatasize2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x36600055",
+            "data" : "0x230000000000000000000000000000000000000000000000000000000000000023",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x21"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x36600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "caller" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x33600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x33600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xcd1722f3947def4cf144679da39c4c32bdc35681"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x33600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "callvalue" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x34600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x34600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x0de0b6b3a7640000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x34600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "codecopy0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60056000600039600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60056000600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x6005600060000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60056000600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "codecopy1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x386000600039600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x386000600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x3860006000396000516000550000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x386000600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "codecopy_DataIndexTooHigh" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999891",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "codesize" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x38600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x04"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "extcodecopy0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x333b60006000333c600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "123456789",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999689",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333b60006000333c600051600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x6005600055000000000000000000000000000000000000000000000000000000"
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333b60006000333c600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "extcodecopy_DataIndexTooHigh" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999890",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "extcodesize0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x38333b14600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "123456789",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38333b14600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x01"
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38333b14600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38333b14600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38333b14600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "extcodesize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "caller" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "code" : "0x333b600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "123456789",
+            "origin" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333b600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x04"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x38600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            },
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x333b600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gasprice" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x3a600055",
+            "data" : "0x01234567890abcdef01234567890abcdef",
+            "gas" : "100000000000",
+            "gasPrice" : "123456789",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x075bcd15"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x3a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "origin" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x32600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x32600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xcd1722f3947def4cf144679da39c4c32bdc35681"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x32600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmIOandFlowOperationsTest.json b/tests/files/VMTests/vmIOandFlowOperationsTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..1209770864d605fd339e0fe74f6d317e74b6167a
--- /dev/null
+++ b/tests/files/VMTests/vmIOandFlowOperationsTest.json
@@ -0,0 +1,1527 @@
+{
+    "dupAt51becameMload" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600260035155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260035155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260035155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gas0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x64ffffffffff60005261eeee605a525a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9688",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee605a525a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x2705"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee605a525a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "gas1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x5a600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x5a600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x270f"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x5a600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60236007566001600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60236007566001600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60236007566001600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0_foreverOutOfGas" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600056",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600056",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0_jumpdest0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x602360075660015b600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360075660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360075660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0_jumpdest1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x602360085660015b600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360085660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360085660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0_jumpdest2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6023600a6008505660015b600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6023600a6008505660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6023600a6008505660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump0_jumpdest3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6023600b6008505660015b600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6023600b6008505660015b600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jump1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x620fffff620fffff0156",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x620fffff620fffff0156",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jumpi0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x602360016009576001600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360016009576001600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360016009576001600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jumpi1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x602360006009576001600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360006009576001600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x602360006009576001600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jumpi1_jumpdest" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60236001600a5760015b600255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60236001600a5760015b600255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x23"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60236001600a5760015b600255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "jumpi2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff576002600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9997",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff576002600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff576002600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mloadError0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600051600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600051600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mloadError1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6017600152600051600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9892",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600152600051600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600152600051600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mloadOutOfGasError2" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6272482551600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6272482551600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "msize0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005259600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005259600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x20"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005259600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "msize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x64ffffffffff60005259600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005259600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x20"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005259600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "msize2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x64ffffffffff60005261eeee60205259600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9690",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee60205259600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x40"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee60205259600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "msize3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x64ffffffffff60005261eeee605a5259600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9688",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee605a5259600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x80"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64ffffffffff60005261eeee605a5259600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600152600151600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9690",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600201600152600151600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore8WordToBigError" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore8_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0xff00000000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600153600151600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore8_1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60015360ee600253600051600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9690",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60015360ee600253600051600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0xffee0000000000000000000000000000000000000000000000000000000000"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60015360ee600253600051600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstoreWordToBigError" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mstore_mload0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6017600052600051600155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600052600051600155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x01" : "0x17"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6017600052600051600155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "pc0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x58600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9898",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x58600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x58600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "pc1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005558600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9596",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005558600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x05"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005558600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "pop0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600360045055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600360045055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600360045055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "pop1" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x5060026003600455",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x5060026003600455",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sstore_load_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005560ee600a55600054601455",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9074",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee600a55600054601455",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xff",
+                    "0x0a" : "0xee",
+                    "0x14" : "0xff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee600a55600054601455",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sstore_load_1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005560ee600a55606454601455",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9274",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee600a55606454601455",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xff",
+                    "0x0a" : "0xee"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee600a55606454601455",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sstore_load_2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005560ee60015560dd600255600154600a55600254601455",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "8450",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee60015560dd600255600154600a55600254601455",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xff",
+                    "0x01" : "0xee",
+                    "0x02" : "0xdd",
+                    "0x0a" : "0xee",
+                    "0x14" : "0xdd"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005560ee60015560dd600255600154600a55600254601455",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swapAt52becameMstore" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600260035255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600260035255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmLogTest.json b/tests/files/VMTests/vmLogTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..48e20ac63e88ce1148955997317fbe6bc800ece0
--- /dev/null
+++ b/tests/files/VMTests/vmLogTest.json
@@ -0,0 +1,2190 @@
+{
+    "log0_emptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60006000a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9966",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_logMemsizeZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9962",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_nonEmptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9930",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_nonEmptyMem_logMemSize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9961",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log0_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9961",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_Caller" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff6000533360206000a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9897",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000008000000808100000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff6000533360206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff6000533360206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_MaxTopic" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9897",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_emptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600060006000a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9933",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_logMemsizeZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9929",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_nonEmptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9897",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_nonEmptyMem_logMemSize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9928",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log1_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9928",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_Caller" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005333600060206000a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9864",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005333600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005333600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_MaxTopic" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9864",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_emptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600060006000a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9900",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600060006000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_logMemsizeZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9896",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_nonEmptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9864",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_nonEmptyMem_logMemSize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9895",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log2_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9895",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_Caller" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff600053336000600060206000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9831",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff600053336000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff600053336000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_MaxTopic" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9831",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_PC" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff60005358585860206000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9831",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000",
+                "data" : "0xff00000000000000000000000000000000000000000000000000000000000000",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000007",
+                    "0000000000000000000000000000000000000000000000000000000000000006",
+                    "0000000000000000000000000000000000000000000000000000000000000005"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005358585860206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff60005358585860206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_emptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60006000600060006000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9867",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_logMemsizeZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9863",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_nonEmptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9831",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_nonEmptyMem_logMemSize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9862",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log3_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9862",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_Caller" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_MaxTopic" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9798",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020",
+                "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd",
+                "topics" : [
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_PC" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "10000",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_emptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600060006000600060006000a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9834",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000600060006000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000600060006000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_logMemStartTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_logMemsizeTooHigh" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_logMemsizeZero" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9830",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0x",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_nonEmptyMem" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9798",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_nonEmptyMem_logMemSize1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9829",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xaa",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log4_nonEmptyMem_logMemSize1_logMemStart31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9829",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000",
+                "data" : "0xdd",
+                "topics" : [
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000",
+                    "0000000000000000000000000000000000000000000000000000000000000000"
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "log_2logs" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9880",
+        "logs" : [
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            },
+            {
+                "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+                "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000",
+                "data" : "0xffffffffffffffffffffffffffffffff",
+                "topics" : [
+                ]
+            }
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmPushDupSwapTest.json b/tests/files/VMTests/vmPushDupSwapTest.json
new file mode 100644
index 0000000000000000000000000000000000000000..9c69aed803c29d1b9f708be44019ad3f3c011527
--- /dev/null
+++ b/tests/files/VMTests/vmPushDupSwapTest.json
@@ -0,0 +1,3072 @@
+{
+    "dup1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff80600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup10" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600a60096008600760066005600460036002600189600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9688",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a60096008600760066005600460036002600189600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0a"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a60096008600760066005600460036002600189600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup11" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600b600a6009600860076006600560046003600260018a600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9687",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600b600a6009600860076006600560046003600260018a600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0b"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600b600a6009600860076006600560046003600260018a600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup12" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600c600b600a6009600860076006600560046003600260018b600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9686",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600c600b600a6009600860076006600560046003600260018b600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0c"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600c600b600a6009600860076006600560046003600260018b600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup13" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9685",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0d"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600d600c600b600a6009600860076006600560046003600260018c600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup14" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9684",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0e"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600e600d600c600b600a6009600860076006600560046003600260018d600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup15" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9683",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x0f"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600f600e600d600c600b600a6009600860076006600560046003600260018e600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup16" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9682",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x10"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6010600f600e600d600c600b600a6009600860076006600560046003600260018f600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600181600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600181600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x02"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600181600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup2error" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff81600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff81600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036002600182600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600182600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600182600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600460036002600183600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600460036002600183600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x04"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600460036002600183600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6005600460036002600184600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600460036002600184600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x05"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600460036002600184600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60066005600460036002600185600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60066005600460036002600185600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x06"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60066005600460036002600185600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup7" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600760066005600460036002600186600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600760066005600460036002600186600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x07"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600760066005600460036002600186600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup8" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6008600760066005600460036002600187600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9690",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6008600760066005600460036002600187600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x08"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6008600760066005600460036002600187600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "dup9" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60096008600760066005600460036002600188600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9689",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60096008600760066005600460036002600188600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x09"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60096008600760066005600460036002600188600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60ff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60ff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push10" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6966778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6966778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x66778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6966778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push11" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6a5566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6a5566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x5566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6a5566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push12" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6b445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6b445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6b445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push13" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6c33445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6c33445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x33445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6c33445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push14" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6d2233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6d2233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x2233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6d2233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push15" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6e112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6e112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6e112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push16" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6f10112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6f10112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x10112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6f10112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push17" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x70ff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x70ff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x70ff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push18" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x71eeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x71eeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x71eeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push19" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x72ddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push1_missingStack" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9999",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x61eeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61eeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x61eeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push20" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x73ccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push21" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xbbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x74bbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push22" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xaabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x75aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push23" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x99aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7699aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push24" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x8899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push25" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x78778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push26" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x66778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7966778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push27" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x5566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7a5566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push28" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7b445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push29" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x33445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7c33445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x62ddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62ddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x62ddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push30" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x2233445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7d2233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push31" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7e112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push32" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push32AndSuicide" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9999",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "bbccddeeff00112233445566778899aabbccddee" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push32FillUpInputWithZerosAtTheEnd" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9999",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x63ccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x63ccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x63ccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x64bbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64bbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xbbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x64bbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x65aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x65aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0xaabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x65aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push7" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6699aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6699aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x99aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6699aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push8" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x678899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x678899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x8899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x678899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "push9" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x68778899aabbccddeeff600355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9698",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x68778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x778899aabbccddeeff"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x68778899aabbccddeeff600355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9697",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" : "0x03"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap10" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600a60096008600760066005600460036002600160039955",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9688",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a60096008600760066005600460036002600160039955",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0a" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a60096008600760066005600460036002600160039955",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap11" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600b600a60096008600760066005600460036002600160039a55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9687",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600b600a60096008600760066005600460036002600160039a55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0b" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600b600a60096008600760066005600460036002600160039a55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap12" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600c600b600a60096008600760066005600460036002600160039b55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9686",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600c600b600a60096008600760066005600460036002600160039b55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0c" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600c600b600a60096008600760066005600460036002600160039b55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap13" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9685",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0d" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600d600c600b600a60096008600760066005600460036002600160039c55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap14" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9684",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0e" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600e600d600c600b600a60096008600760066005600460036002600160039d55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap15" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9683",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x0f" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600f600e600d600c600b600a60096008600760066005600460036002600160039e55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap16" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9682",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55",
+                "nonce" : "0",
+                "storage" : {
+                    "0x10" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6010600f600e600d600c600b600a60096008600760066005600460036002600160039f55",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6002600160039155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9696",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600160039155",
+                "nonce" : "0",
+                "storage" : {
+                    "0x02" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6002600160039155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap2error" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039155",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039155",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap3" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60036002600160039255",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9695",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600160039255",
+                "nonce" : "0",
+                "storage" : {
+                    "0x03" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60036002600160039255",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap4" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600460036002600160039355",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9694",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600460036002600160039355",
+                "nonce" : "0",
+                "storage" : {
+                    "0x04" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600460036002600160039355",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap5" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6005600460036002600160039455",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9693",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600460036002600160039455",
+                "nonce" : "0",
+                "storage" : {
+                    "0x05" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600460036002600160039455",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap6" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60066005600460036002600160039555",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9692",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60066005600460036002600160039555",
+                "nonce" : "0",
+                "storage" : {
+                    "0x06" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60066005600460036002600160039555",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap7" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600760066005600460036002600160039655",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9691",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600760066005600460036002600160039655",
+                "nonce" : "0",
+                "storage" : {
+                    "0x07" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600760066005600460036002600160039655",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap8" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6008600760066005600460036002600160039755",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9690",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6008600760066005600460036002600160039755",
+                "nonce" : "0",
+                "storage" : {
+                    "0x08" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6008600760066005600460036002600160039755",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "swap9" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60096008600760066005600460036002600160039855",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9689",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60096008600760066005600460036002600160039855",
+                "nonce" : "0",
+                "storage" : {
+                    "0x09" : "0x01"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60096008600760066005600460036002600160039855",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmSha3Test.json b/tests/files/VMTests/vmSha3Test.json
new file mode 100644
index 0000000000000000000000000000000000000000..b9e6b46a1971ac67d83cc6d9a365f26b2baf5e0d
--- /dev/null
+++ b/tests/files/VMTests/vmSha3Test.json
@@ -0,0 +1,253 @@
+{
+    "sha3_0" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6000600020600055",
+            "data" : "0x",
+            "gas" : "100000000000",
+            "gasPrice" : "1000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "99999999687",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600020600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6000600020600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_1" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6005600420600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9676",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600420600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6005600420600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_2" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600a600a20600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9676",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a600a20600055",
+                "nonce" : "0",
+                "storage" : {
+                    "0x" : "0x6bd2dd6bd408cbee33429358bf24fdc64612fbf8b1b4db604518f40ffd34b607"
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600a600a20600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_3" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x620fffff6103e820600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x620fffff6103e820600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_4" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x6064640fffffffff20600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x6064640fffffffff20600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_5" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x640fffffffff61271020600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x640fffffffff61271020600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "sha3_6" : {
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/VMTests/vmtests.json b/tests/files/VMTests/vmtests.json
new file mode 100644
index 0000000000000000000000000000000000000000..e1d73ee5d3751f3267b2d5f2bfafab02dd0c82cc
--- /dev/null
+++ b/tests/files/VMTests/vmtests.json
@@ -0,0 +1,214 @@
+{
+    "arith" : {
+        "callcreates" : [
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9770",
+                "value" : "74"
+            }
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600060006000600060026002600803036002600306600260020460046004600402026002600201010101013360c85a03f1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9949",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "999999999999999926",
+                "code" : "0x600060006000600060026002600803036002600306600260020460046004600402026002600201010101013360c85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600060006000600060026002600803036002600306600260020460046004600402026002600201010101013360c85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "boolean" : {
+        "callcreates" : [
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9786",
+                "value" : "2"
+            },
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9728",
+                "value" : "12"
+            },
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9691",
+                "value" : "13"
+            },
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9654",
+                "value" : "14"
+            }
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x600160011615601a57600060006000600060023360c85a03f1505b600060011615603557600060006000600060033360c85a03f1505b600160001615605057600060006000600060043360c85a03f1505b600060001615606b57600060006000600060053360c85a03f1505b6001600117156086576000600060006000600c3360c85a03f1505b60006001171560a1576000600060006000600d3360c85a03f1505b60016000171560bc576000600060006000600e3360c85a03f1505b60006000171560d7576000600060006000600f3360c85a03f1505b",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9824",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "999999999999999959",
+                "code" : "0x600160011615601a57600060006000600060023360c85a03f1505b600060011615603557600060006000600060033360c85a03f1505b600160001615605057600060006000600060043360c85a03f1505b600060001615606b57600060006000600060053360c85a03f1505b6001600117156086576000600060006000600c3360c85a03f1505b60006001171560a1576000600060006000600d3360c85a03f1505b60016000171560bc576000600060006000600e3360c85a03f1505b60006000171560d7576000600060006000600f3360c85a03f1505b",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x600160011615601a57600060006000600060023360c85a03f1505b600060011615603557600060006000600060033360c85a03f1505b600160001615605057600060006000600060043360c85a03f1505b600060001615606b57600060006000600060053360c85a03f1505b6001600117156086576000600060006000600c3360c85a03f1505b60006001171560a1576000600060006000600d3360c85a03f1505b60016000171560bc576000600060006000600e3360c85a03f1505b60006000171560d7576000600060006000600f3360c85a03f1505b",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "mktx" : {
+        "callcreates" : [
+            {
+                "data" : "0x",
+                "destination" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+                "gasLimit" : "9792",
+                "value" : "500000000000000000"
+            }
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x60006000600060006706f05b59d3b200003360c85a03f1",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9971",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "500000000000000000",
+                "code" : "0x60006000600060006706f05b59d3b200003360c85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x60006000600060006706f05b59d3b200003360c85a03f1",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    },
+    "suicide" : {
+        "callcreates" : [
+        ],
+        "env" : {
+            "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+            "currentDifficulty" : "256",
+            "currentGasLimit" : "1000000",
+            "currentNumber" : "0",
+            "currentTimestamp" : "1",
+            "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+        },
+        "exec" : {
+            "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+            "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "code" : "0x33ff",
+            "data" : "0x",
+            "gas" : "10000",
+            "gasPrice" : "100000000000000",
+            "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
+            "value" : "1000000000000000000"
+        },
+        "gas" : "9999",
+        "logs" : [
+        ],
+        "out" : "0x",
+        "post" : {
+            "cd1722f3947def4cf144679da39c4c32bdc35681" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        },
+        "pre" : {
+            "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+                "balance" : "1000000000000000000",
+                "code" : "0x33ff",
+                "nonce" : "0",
+                "storage" : {
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/files/index.js b/tests/files/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..34a03d8b2b4aa71dd5a6e88abf392c56665ed0f9
--- /dev/null
+++ b/tests/files/index.js
@@ -0,0 +1,32 @@
+module.exports = {
+  blockgenesis: require('./BasicTests/blockgenesistest'),
+  genesishashes: require('./BasicTests/genesishashestest'),
+  hexencode: require('./BasicTests/hexencodetest'),
+  keyaddrtests: require('./BasicTests/keyaddrtest'),
+  rlptest: require('./BasicTests/rlptest'),
+  trietest: require('./TrieTests/trietest'),
+  trietestnextprev: require('./TrieTests/trietestnextprev'),
+  txtest: require('./BasicTests/txtest'),
+  StateTests: {
+    stExample: require('./StateTests/stExample.json'),
+    stInitCodeTest: require('./StateTests/stInitCodeTest.json'),
+    stLogTests: require('./StateTests/stLogTests.json'),
+    stPreCompiledContracts: require('./StateTests/stPreCompiledContracts'),
+    stRecursiveCreate: require('./StateTests/stRecursiveCreate'),
+    stSpecial: require('./StateTests/stSpecialTest'),
+    stSystemOperationsTest: require('./StateTests/stSystemOperationsTest'),
+    stTransactionTest: require('./StateTests/stTransactionTest')
+  },
+  VMTests: {
+    vmRandom: require('./VMTests/RandomTests/randomTest'),
+    vmArithmeticTest: require('./VMTests/vmArithmeticTest'),
+    vmBitwiseLogicOperationTest: require('./VMTests/vmBitwiseLogicOperationTest'),
+    vmBlockInfoTest: require('./VMTests/vmBlockInfoTest'),
+    vmEnvironmentalInfoTest: require('./VMTests/vmEnvironmentalInfoTest'),
+    vmIOandFlowOperationsTest: require('./VMTests/vmIOandFlowOperationsTest'),
+    vmLogTest: require('./VMTests/vmLogTest'),
+    vmPushDupSwapTest: require('./VMTests/vmPushDupSwapTest'),
+    vmSha3Test: require('./VMTests/vmSha3Test'),
+    vmtests: require('./VMTests/vmtests')
+  }
+};
diff --git a/tests/files/package.json b/tests/files/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..eb0841450e1a8b43741ebe9eac687ba55c724e9e
--- /dev/null
+++ b/tests/files/package.json
@@ -0,0 +1,23 @@
+{
+  "name": "ethereum-tests",
+  "version": "0.0.0",
+  "description": "tests for ethereum",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"There are no tests for there tests\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/ethereum/tests"
+  },
+  "keywords": [
+    "tests",
+    "ethereum"
+  ],
+  "author": "",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/ethereum/tests/issues"
+  },
+  "homepage": "https://github.com/ethereum/tests"
+}
diff --git a/tests/helper/common.go b/tests/helper/common.go
new file mode 100644
index 0000000000000000000000000000000000000000..6a071968d2fa9d481517932e2d5b513c0f3af691
--- /dev/null
+++ b/tests/helper/common.go
@@ -0,0 +1,11 @@
+package helper
+
+import "github.com/ethereum/go-ethereum/ethutil"
+
+func FromHex(h string) []byte {
+	if ethutil.IsHex(h) {
+		h = h[2:]
+	}
+
+	return ethutil.Hex2Bytes(h)
+}
diff --git a/tests/helper/init.go b/tests/helper/init.go
new file mode 100644
index 0000000000000000000000000000000000000000..578314e20a014a48804abc0967d57bcc3f2db50a
--- /dev/null
+++ b/tests/helper/init.go
@@ -0,0 +1,20 @@
+package helper
+
+import (
+	"log"
+	"os"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	logpkg "github.com/ethereum/go-ethereum/logger"
+)
+
+var Logger logpkg.LogSystem
+var Log = logpkg.NewLogger("TEST")
+
+func init() {
+	Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.InfoLevel)
+	logpkg.AddLogSystem(Logger)
+
+	ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "")
+	ethutil.Config.Db, _ = NewMemDatabase()
+}
diff --git a/tests/helper/readers.go b/tests/helper/readers.go
new file mode 100644
index 0000000000000000000000000000000000000000..03313aedaeb619f75690ae9b08b610c545ca6b36
--- /dev/null
+++ b/tests/helper/readers.go
@@ -0,0 +1,42 @@
+package helper
+
+import (
+	"encoding/json"
+	"io"
+	"io/ioutil"
+	"net/http"
+	"os"
+	"testing"
+)
+
+func readJSON(t *testing.T, reader io.Reader, value interface{}) {
+	data, err := ioutil.ReadAll(reader)
+	err = json.Unmarshal(data, &value)
+	if err != nil {
+		t.Error(err)
+	}
+}
+
+func CreateHttpTests(t *testing.T, uri string, value interface{}) {
+	resp, err := http.Get(uri)
+	if err != nil {
+		t.Error(err)
+
+		return
+	}
+	defer resp.Body.Close()
+
+	readJSON(t, resp.Body, value)
+}
+
+func CreateFileTests(t *testing.T, fn string, value interface{}) {
+	file, err := os.Open(fn)
+	if err != nil {
+		t.Error(err)
+
+		return
+	}
+	defer file.Close()
+
+	readJSON(t, file, value)
+}
diff --git a/tests/helper/trie.go b/tests/helper/trie.go
new file mode 100644
index 0000000000000000000000000000000000000000..32432cc7a52b4bf1e4d43b4f4c98d26cd1a7c68b
--- /dev/null
+++ b/tests/helper/trie.go
@@ -0,0 +1,31 @@
+package helper
+
+import "github.com/ethereum/go-ethereum/trie"
+
+type MemDatabase struct {
+	db map[string][]byte
+}
+
+func NewMemDatabase() (*MemDatabase, error) {
+	db := &MemDatabase{db: make(map[string][]byte)}
+	return db, nil
+}
+func (db *MemDatabase) Put(key []byte, value []byte) {
+	db.db[string(key)] = value
+}
+func (db *MemDatabase) Get(key []byte) ([]byte, error) {
+	return db.db[string(key)], nil
+}
+func (db *MemDatabase) Delete(key []byte) error {
+	delete(db.db, string(key))
+	return nil
+}
+func (db *MemDatabase) Print()              {}
+func (db *MemDatabase) Close()              {}
+func (db *MemDatabase) LastKnownTD() []byte { return nil }
+
+func NewTrie() *trie.Trie {
+	db, _ := NewMemDatabase()
+
+	return trie.New(db, "")
+}
diff --git a/tests/helper/vm.go b/tests/helper/vm.go
new file mode 100644
index 0000000000000000000000000000000000000000..e174e0892eb158e10992c0977d8f406c8e49043e
--- /dev/null
+++ b/tests/helper/vm.go
@@ -0,0 +1,156 @@
+package helper
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+type Env struct {
+	depth        int
+	state        *state.StateDB
+	skipTransfer bool
+	Gas          *big.Int
+
+	origin   []byte
+	parent   []byte
+	coinbase []byte
+
+	number     *big.Int
+	time       int64
+	difficulty *big.Int
+	gasLimit   *big.Int
+
+	logs state.Logs
+}
+
+func NewEnv(state *state.StateDB) *Env {
+	return &Env{
+		state: state,
+	}
+}
+
+func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env {
+	env := NewEnv(state)
+
+	env.origin = ethutil.Hex2Bytes(exeValues["caller"])
+	env.parent = ethutil.Hex2Bytes(envValues["previousHash"])
+	env.coinbase = ethutil.Hex2Bytes(envValues["currentCoinbase"])
+	env.number = ethutil.Big(envValues["currentNumber"])
+	env.time = ethutil.Big(envValues["currentTimestamp"]).Int64()
+	env.difficulty = ethutil.Big(envValues["currentDifficulty"])
+	env.gasLimit = ethutil.Big(envValues["currentGasLimit"])
+	env.Gas = new(big.Int)
+
+	return env
+}
+
+func (self *Env) Origin() []byte        { return self.origin }
+func (self *Env) BlockNumber() *big.Int { return self.number }
+func (self *Env) PrevHash() []byte      { return self.parent }
+func (self *Env) Coinbase() []byte      { return self.coinbase }
+func (self *Env) Time() int64           { return self.time }
+func (self *Env) Difficulty() *big.Int  { return self.difficulty }
+func (self *Env) BlockHash() []byte     { return nil }
+func (self *Env) State() *state.StateDB { return self.state }
+func (self *Env) GasLimit() *big.Int    { return self.gasLimit }
+func (self *Env) AddLog(log state.Log) {
+	self.logs = append(self.logs, log)
+}
+func (self *Env) Depth() int     { return self.depth }
+func (self *Env) SetDepth(i int) { self.depth = i }
+func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error {
+	return vm.Transfer(from, to, amount)
+}
+
+func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution {
+	exec := core.NewExecution(self, addr, data, gas, price, value)
+	exec.SkipTransfer = self.skipTransfer
+
+	return exec
+}
+
+func (self *Env) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(addr, data, gas, price, value)
+	ret, err := exe.Call(addr, caller)
+	self.Gas = exe.Gas
+
+	return ret, err
+}
+func (self *Env) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(caller.Address(), data, gas, price, value)
+	return exe.Call(addr, caller)
+}
+
+func (self *Env) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Create(caller)
+}
+
+func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) {
+	var (
+		to    = FromHex(exec["address"])
+		from  = FromHex(exec["caller"])
+		data  = FromHex(exec["data"])
+		gas   = ethutil.Big(exec["gas"])
+		price = ethutil.Big(exec["gasPrice"])
+		value = ethutil.Big(exec["value"])
+	)
+
+	caller := state.GetOrNewStateObject(from)
+
+	vmenv := NewEnvFromMap(state, env, exec)
+	vmenv.skipTransfer = true
+	ret, err := vmenv.Call(caller, to, data, gas, price, value)
+
+	return ret, vmenv.logs, vmenv.Gas, err
+}
+
+func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) {
+	var (
+		keyPair, _ = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"])))
+		to         = FromHex(tx["to"])
+		data       = FromHex(tx["data"])
+		gas        = ethutil.Big(tx["gasLimit"])
+		price      = ethutil.Big(tx["gasPrice"])
+		value      = ethutil.Big(tx["value"])
+		caddr      = FromHex(env["currentCoinbase"])
+	)
+
+	coinbase := statedb.GetOrNewStateObject(caddr)
+	coinbase.SetGasPool(ethutil.Big(env["currentGasLimit"]))
+
+	message := NewMessage(keyPair.Address(), to, data, value, gas, price)
+	Log.DebugDetailf("message{ to: %x, from %x, value: %v, gas: %v, price: %v }\n", message.to[:4], message.from[:4], message.value, message.gas, message.price)
+	st := core.NewStateTransition(coinbase, message, statedb, nil)
+	vmenv := NewEnvFromMap(statedb, env, tx)
+	vmenv.origin = keyPair.Address()
+	st.Env = vmenv
+	ret, err := st.TransitionState()
+	statedb.Update(vmenv.Gas)
+
+	return ret, vmenv.logs, vmenv.Gas, err
+}
+
+type Message struct {
+	from, to          []byte
+	value, gas, price *big.Int
+	data              []byte
+}
+
+func NewMessage(from, to, data []byte, value, gas, price *big.Int) Message {
+	return Message{from, to, value, gas, price, data}
+}
+
+func (self Message) Hash() []byte       { return nil }
+func (self Message) From() []byte       { return self.from }
+func (self Message) To() []byte         { return self.to }
+func (self Message) GasPrice() *big.Int { return self.price }
+func (self Message) Gas() *big.Int      { return self.gas }
+func (self Message) Value() *big.Int    { return self.value }
+func (self Message) Nonce() uint64      { return 0 }
+func (self Message) Data() []byte       { return self.data }
diff --git a/tests/vm/.ethtest b/tests/vm/.ethtest
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..1efda7fe0009ca9e3fd832514b7f3e9d43d5fab9
--- /dev/null
+++ b/tests/vm/gh_test.go
@@ -0,0 +1,238 @@
+package vm
+
+import (
+	"bytes"
+	"math/big"
+	"strconv"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/tests/helper"
+)
+
+type Account struct {
+	Balance string
+	Code    string
+	Nonce   string
+	Storage map[string]string
+}
+
+type Log struct {
+	AddressF string   `json:"address"`
+	DataF    string   `json:"data"`
+	TopicsF  []string `json:"topics"`
+	BloomF   string   `json:"bloom"`
+}
+
+func (self Log) Address() []byte      { return ethutil.Hex2Bytes(self.AddressF) }
+func (self Log) Data() []byte         { return ethutil.Hex2Bytes(self.DataF) }
+func (self Log) RlpData() interface{} { return nil }
+func (self Log) Topics() [][]byte {
+	t := make([][]byte, len(self.TopicsF))
+	for i, topic := range self.TopicsF {
+		t[i] = ethutil.Hex2Bytes(topic)
+	}
+	return t
+}
+
+func StateObjectFromAccount(addr string, account Account) *state.StateObject {
+	obj := state.NewStateObject(ethutil.Hex2Bytes(addr))
+	obj.SetBalance(ethutil.Big(account.Balance))
+
+	if ethutil.IsHex(account.Code) {
+		account.Code = account.Code[2:]
+	}
+	obj.Code = ethutil.Hex2Bytes(account.Code)
+	obj.Nonce = ethutil.Big(account.Nonce).Uint64()
+
+	return obj
+}
+
+type Env struct {
+	CurrentCoinbase   string
+	CurrentDifficulty string
+	CurrentGasLimit   string
+	CurrentNumber     string
+	CurrentTimestamp  interface{}
+	PreviousHash      string
+}
+
+type VmTest struct {
+	Callcreates interface{}
+	//Env         map[string]string
+	Env         Env
+	Exec        map[string]string
+	Transaction map[string]string
+	Logs        []Log
+	Gas         string
+	Out         string
+	Post        map[string]Account
+	Pre         map[string]Account
+}
+
+func RunVmTest(p string, t *testing.T) {
+	tests := make(map[string]VmTest)
+	helper.CreateFileTests(t, p, &tests)
+
+	for name, test := range tests {
+		statedb := state.New(helper.NewTrie())
+		for addr, account := range test.Pre {
+			obj := StateObjectFromAccount(addr, account)
+			statedb.SetStateObject(obj)
+			for a, v := range account.Storage {
+				obj.SetState(helper.FromHex(a), ethutil.NewValue(helper.FromHex(v)))
+			}
+		}
+
+		// XXX Yeah, yeah...
+		env := make(map[string]string)
+		env["currentCoinbase"] = test.Env.CurrentCoinbase
+		env["currentDifficulty"] = test.Env.CurrentDifficulty
+		env["currentGasLimit"] = test.Env.CurrentGasLimit
+		env["currentNumber"] = test.Env.CurrentNumber
+		env["previousHash"] = test.Env.PreviousHash
+		if n, ok := test.Env.CurrentTimestamp.(float64); ok {
+			env["currentTimestamp"] = strconv.Itoa(int(n))
+		} else {
+			env["currentTimestamp"] = test.Env.CurrentTimestamp.(string)
+		}
+
+		var (
+			ret  []byte
+			gas  *big.Int
+			err  error
+			logs state.Logs
+		)
+
+		if len(test.Exec) > 0 {
+			ret, logs, gas, err = helper.RunVm(statedb, env, test.Exec)
+		} else {
+			ret, logs, gas, err = helper.RunState(statedb, env, test.Transaction)
+		}
+
+		// When an error is returned it doesn't always mean the tests fails.
+		// Have to come up with some conditional failing mechanism.
+		if err != nil {
+			helper.Log.Infoln(err)
+		}
+
+		rexp := helper.FromHex(test.Out)
+		if bytes.Compare(rexp, ret) != 0 {
+			t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret)
+		}
+
+		if len(test.Gas) > 0 {
+			gexp := ethutil.Big(test.Gas)
+			if gexp.Cmp(gas) != 0 {
+				t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas)
+			}
+		}
+
+		for addr, account := range test.Post {
+			obj := statedb.GetStateObject(helper.FromHex(addr))
+			if obj == nil {
+				continue
+			}
+
+			if len(test.Exec) == 0 {
+				if obj.Balance().Cmp(ethutil.Big(account.Balance)) != 0 {
+					t.Errorf("%s's : (%x) balance failed. Expected %v, got %v => %v\n", name, obj.Address()[:4], account.Balance, obj.Balance(), new(big.Int).Sub(ethutil.Big(account.Balance), obj.Balance()))
+				}
+			}
+
+			for addr, value := range account.Storage {
+				v := obj.GetState(helper.FromHex(addr)).Bytes()
+				vexp := helper.FromHex(value)
+
+				if bytes.Compare(v, vexp) != 0 {
+					t.Errorf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v))
+				}
+			}
+		}
+
+		if len(test.Logs) > 0 {
+			// Logs within the test itself aren't correct, missing empty fields (32 0s)
+			for i, log := range test.Logs {
+				genBloom := ethutil.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 64)
+				if !bytes.Equal(genBloom, ethutil.Hex2Bytes(log.BloomF)) {
+					t.Errorf("bloom mismatch")
+				}
+			}
+		}
+	}
+	logger.Flush()
+}
+
+// I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail.
+func TestVMArithmetic(t *testing.T) {
+	const fn = "../files/vmtests/vmArithmeticTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestBitwiseLogicOperation(t *testing.T) {
+	const fn = "../files/vmtests/vmBitwiseLogicOperationTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestBlockInfo(t *testing.T) {
+	const fn = "../files/vmtests/vmBlockInfoTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestEnvironmentalInfo(t *testing.T) {
+	const fn = "../files/vmtests/vmEnvironmentalInfoTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestFlowOperation(t *testing.T) {
+	const fn = "../files/vmtests/vmIOandFlowOperationsTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestPushDupSwap(t *testing.T) {
+	const fn = "../files/vmtests/vmPushDupSwapTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestVMSha3(t *testing.T) {
+	const fn = "../files/vmtests/vmSha3Test.json"
+	RunVmTest(fn, t)
+}
+
+func TestVm(t *testing.T) {
+	const fn = "../files/vmtests/vmtests.json"
+	RunVmTest(fn, t)
+}
+
+func TestVmLog(t *testing.T) {
+	const fn = "../files/vmtests/vmLogTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestStateSystemOperations(t *testing.T) {
+	const fn = "../files/StateTests/stSystemOperationsTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestStatePreCompiledContracts(t *testing.T) {
+	const fn = "../files/StateTests/stPreCompiledContracts.json"
+	RunVmTest(fn, t)
+}
+
+func TestStateRecursiveCreate(t *testing.T) {
+	const fn = "../files/StateTests/stRecursiveCreate.json"
+	RunVmTest(fn, t)
+}
+
+func TestStateSpecial(t *testing.T) {
+	const fn = "../files/StateTests/stSpecialTest.json"
+	RunVmTest(fn, t)
+}
+
+func TestStateRefund(t *testing.T) {
+	const fn = "../files/StateTests/stRefundTest.json"
+	RunVmTest(fn, t)
+}
diff --git a/trie/encoding.go b/trie/encoding.go
new file mode 100644
index 0000000000000000000000000000000000000000..4906bc90b2da2ef43322dc6347b620c0aa5c4140
--- /dev/null
+++ b/trie/encoding.go
@@ -0,0 +1,76 @@
+package trie
+
+import (
+	"bytes"
+	"encoding/hex"
+	"strings"
+)
+
+func CompactEncode(hexSlice []byte) string {
+	terminator := 0
+	if hexSlice[len(hexSlice)-1] == 16 {
+		terminator = 1
+	}
+
+	if terminator == 1 {
+		hexSlice = hexSlice[:len(hexSlice)-1]
+	}
+
+	oddlen := len(hexSlice) % 2
+	flags := byte(2*terminator + oddlen)
+	if oddlen != 0 {
+		hexSlice = append([]byte{flags}, hexSlice...)
+	} else {
+		hexSlice = append([]byte{flags, 0}, hexSlice...)
+	}
+
+	var buff bytes.Buffer
+	for i := 0; i < len(hexSlice); i += 2 {
+		buff.WriteByte(byte(16*hexSlice[i] + hexSlice[i+1]))
+	}
+
+	return buff.String()
+}
+
+func CompactDecode(str string) []byte {
+	base := CompactHexDecode(str)
+	base = base[:len(base)-1]
+	if base[0] >= 2 {
+		base = append(base, 16)
+	}
+	if base[0]%2 == 1 {
+		base = base[1:]
+	} else {
+		base = base[2:]
+	}
+
+	return base
+}
+
+func CompactHexDecode(str string) []byte {
+	base := "0123456789abcdef"
+	hexSlice := make([]byte, 0)
+
+	enc := hex.EncodeToString([]byte(str))
+	for _, v := range enc {
+		hexSlice = append(hexSlice, byte(strings.IndexByte(base, byte(v))))
+	}
+	hexSlice = append(hexSlice, 16)
+
+	return hexSlice
+}
+
+func DecodeCompact(key []byte) string {
+	base := "0123456789abcdef"
+	var str string
+
+	for _, v := range key {
+		if v < 16 {
+			str += string(base[v])
+		}
+	}
+
+	res, _ := hex.DecodeString(str)
+
+	return string(res)
+}
diff --git a/trie/encoding_test.go b/trie/encoding_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..193c898f3d619c13f04bdfcd78c72dbcdf7beb9b
--- /dev/null
+++ b/trie/encoding_test.go
@@ -0,0 +1,59 @@
+package trie
+
+import (
+	checker "gopkg.in/check.v1"
+)
+
+type TrieEncodingSuite struct{}
+
+var _ = checker.Suite(&TrieEncodingSuite{})
+
+func (s *TrieEncodingSuite) TestCompactEncode(c *checker.C) {
+	// even compact encode
+	test1 := []byte{1, 2, 3, 4, 5}
+	res1 := CompactEncode(test1)
+	c.Assert(res1, checker.Equals, "\x11\x23\x45")
+
+	// odd compact encode
+	test2 := []byte{0, 1, 2, 3, 4, 5}
+	res2 := CompactEncode(test2)
+	c.Assert(res2, checker.Equals, "\x00\x01\x23\x45")
+
+	//odd terminated compact encode
+	test3 := []byte{0, 15, 1, 12, 11, 8 /*term*/, 16}
+	res3 := CompactEncode(test3)
+	c.Assert(res3, checker.Equals, "\x20\x0f\x1c\xb8")
+
+	// even terminated compact encode
+	test4 := []byte{15, 1, 12, 11, 8 /*term*/, 16}
+	res4 := CompactEncode(test4)
+	c.Assert(res4, checker.Equals, "\x3f\x1c\xb8")
+}
+
+func (s *TrieEncodingSuite) TestCompactHexDecode(c *checker.C) {
+	exp := []byte{7, 6, 6, 5, 7, 2, 6, 2, 16}
+	res := CompactHexDecode("verb")
+	c.Assert(res, checker.DeepEquals, exp)
+}
+
+func (s *TrieEncodingSuite) TestCompactDecode(c *checker.C) {
+	// odd compact decode
+	exp := []byte{1, 2, 3, 4, 5}
+	res := CompactDecode("\x11\x23\x45")
+	c.Assert(res, checker.DeepEquals, exp)
+
+	// even compact decode
+	exp = []byte{0, 1, 2, 3, 4, 5}
+	res = CompactDecode("\x00\x01\x23\x45")
+	c.Assert(res, checker.DeepEquals, exp)
+
+	// even terminated compact decode
+	exp = []byte{0, 15, 1, 12, 11, 8 /*term*/, 16}
+	res = CompactDecode("\x20\x0f\x1c\xb8")
+	c.Assert(res, checker.DeepEquals, exp)
+
+	// even terminated compact decode
+	exp = []byte{15, 1, 12, 11, 8 /*term*/, 16}
+	res = CompactDecode("\x3f\x1c\xb8")
+	c.Assert(res, checker.DeepEquals, exp)
+}
diff --git a/trie/iterator.go b/trie/iterator.go
new file mode 100644
index 0000000000000000000000000000000000000000..53d099a0c35c0e0f032c8b6ac68181d1a4acba19
--- /dev/null
+++ b/trie/iterator.go
@@ -0,0 +1,143 @@
+package trie
+
+import (
+	"bytes"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type NodeType byte
+
+const (
+	EmptyNode NodeType = iota
+	BranchNode
+	LeafNode
+	ExtNode
+)
+
+func getType(node *ethutil.Value) NodeType {
+	if node.Len() == 0 {
+		return EmptyNode
+	}
+
+	if node.Len() == 2 {
+		k := CompactDecode(node.Get(0).Str())
+		if HasTerm(k) {
+			return LeafNode
+		}
+
+		return ExtNode
+	}
+
+	return BranchNode
+}
+
+type Iterator struct {
+	Path [][]byte
+	trie *Trie
+
+	Key   []byte
+	Value *ethutil.Value
+}
+
+func NewIterator(trie *Trie) *Iterator {
+	return &Iterator{trie: trie}
+}
+
+func (self *Iterator) key(node *ethutil.Value, path [][]byte) []byte {
+	switch getType(node) {
+	case LeafNode:
+		k := RemTerm(CompactDecode(node.Get(0).Str()))
+
+		self.Path = append(path, k)
+		self.Value = node.Get(1)
+
+		return k
+	case BranchNode:
+		if node.Get(16).Len() > 0 {
+			return []byte{16}
+		}
+
+		for i := byte(0); i < 16; i++ {
+			o := self.key(self.trie.getNode(node.Get(int(i)).Raw()), append(path, []byte{i}))
+			if o != nil {
+				return append([]byte{i}, o...)
+			}
+		}
+	case ExtNode:
+		currKey := node.Get(0).Bytes()
+
+		return self.key(self.trie.getNode(node.Get(1).Raw()), append(path, currKey))
+	}
+
+	return nil
+}
+
+func (self *Iterator) next(node *ethutil.Value, key []byte, path [][]byte) []byte {
+	switch typ := getType(node); typ {
+	case EmptyNode:
+		return nil
+	case BranchNode:
+		if len(key) > 0 {
+			subNode := self.trie.getNode(node.Get(int(key[0])).Raw())
+
+			o := self.next(subNode, key[1:], append(path, key[:1]))
+			if o != nil {
+				return append([]byte{key[0]}, o...)
+			}
+		}
+
+		var r byte = 0
+		if len(key) > 0 {
+			r = key[0] + 1
+		}
+
+		for i := r; i < 16; i++ {
+			subNode := self.trie.getNode(node.Get(int(i)).Raw())
+			o := self.key(subNode, append(path, []byte{i}))
+			if o != nil {
+				return append([]byte{i}, o...)
+			}
+		}
+	case LeafNode, ExtNode:
+		k := RemTerm(CompactDecode(node.Get(0).Str()))
+		if typ == LeafNode {
+			if bytes.Compare([]byte(k), []byte(key)) > 0 {
+				self.Value = node.Get(1)
+				self.Path = append(path, k)
+
+				return k
+			}
+		} else {
+			subNode := self.trie.getNode(node.Get(1).Raw())
+			subKey := key[len(k):]
+			var ret []byte
+			if BeginsWith(key, k) {
+				ret = self.next(subNode, subKey, append(path, k))
+			} else if bytes.Compare(k, key[:len(k)]) > 0 {
+				ret = self.key(node, append(path, k))
+			} else {
+				ret = nil
+			}
+
+			if ret != nil {
+				return append(k, ret...)
+			}
+		}
+	}
+
+	return nil
+}
+
+// Get the next in keys
+func (self *Iterator) Next(key string) []byte {
+	self.trie.mut.Lock()
+	defer self.trie.mut.Unlock()
+
+	k := RemTerm(CompactHexDecode(key))
+	n := self.next(self.trie.getNode(self.trie.Root), k, nil)
+
+	self.Key = []byte(DecodeCompact(n))
+
+	return self.Key
+}
diff --git a/trie/main_test.go b/trie/main_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..f6f64c06f7b731216d6545a6783e4858a24446b6
--- /dev/null
+++ b/trie/main_test.go
@@ -0,0 +1,9 @@
+package trie
+
+import (
+	"testing"
+
+	checker "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { checker.TestingT(t) }
diff --git a/trie/slice.go b/trie/slice.go
new file mode 100644
index 0000000000000000000000000000000000000000..f53b6c749c4690e66407b634520ee61128cdaf8d
--- /dev/null
+++ b/trie/slice.go
@@ -0,0 +1,53 @@
+package trie
+
+import (
+	"bytes"
+	"math"
+)
+
+// Helper function for comparing slices
+func CompareIntSlice(a, b []int) bool {
+	if len(a) != len(b) {
+		return false
+	}
+	for i, v := range a {
+		if v != b[i] {
+			return false
+		}
+	}
+	return true
+}
+
+// Returns the amount of nibbles that match each other from 0 ...
+func MatchingNibbleLength(a, b []byte) int {
+	var i, length = 0, int(math.Min(float64(len(a)), float64(len(b))))
+
+	for i < length {
+		if a[i] != b[i] {
+			break
+		}
+		i++
+	}
+
+	return i
+}
+
+func HasTerm(s []byte) bool {
+	return s[len(s)-1] == 16
+}
+
+func RemTerm(s []byte) []byte {
+	if HasTerm(s) {
+		return s[:len(s)-1]
+	}
+
+	return s
+}
+
+func BeginsWith(a, b []byte) bool {
+	if len(b) > len(a) {
+		return false
+	}
+
+	return bytes.Equal(a[:len(b)], b)
+}
diff --git a/trie/trie.go b/trie/trie.go
new file mode 100644
index 0000000000000000000000000000000000000000..d89c39775607dcbaa179a4f1eccc2fd6b8c5014f
--- /dev/null
+++ b/trie/trie.go
@@ -0,0 +1,631 @@
+package trie
+
+import (
+	"bytes"
+	"fmt"
+	"sync"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func ParanoiaCheck(t1 *Trie) (bool, *Trie) {
+	t2 := New(ethutil.Config.Db, "")
+
+	t1.NewIterator().Each(func(key string, v *ethutil.Value) {
+		t2.Update(key, v.Str())
+	})
+
+	return bytes.Compare(t2.GetRoot(), t1.GetRoot()) == 0, t2
+}
+
+func (s *Cache) Len() int {
+	return len(s.nodes)
+}
+
+// TODO
+// A StateObject is an object that has a state root
+// This is goig to be the object for the second level caching (the caching of object which have a state such as contracts)
+type StateObject interface {
+	State() *Trie
+	Sync()
+	Undo()
+}
+
+type Node struct {
+	Key   []byte
+	Value *ethutil.Value
+	Dirty bool
+}
+
+func NewNode(key []byte, val *ethutil.Value, dirty bool) *Node {
+	return &Node{Key: key, Value: val, Dirty: dirty}
+}
+
+func (n *Node) Copy() *Node {
+	return NewNode(n.Key, n.Value, n.Dirty)
+}
+
+type Cache struct {
+	nodes   map[string]*Node
+	db      ethutil.Database
+	IsDirty bool
+}
+
+func NewCache(db ethutil.Database) *Cache {
+	return &Cache{db: db, nodes: make(map[string]*Node)}
+}
+
+func (cache *Cache) PutValue(v interface{}, force bool) interface{} {
+	value := ethutil.NewValue(v)
+
+	enc := value.Encode()
+	if len(enc) >= 32 || force {
+		sha := crypto.Sha3(enc)
+
+		cache.nodes[string(sha)] = NewNode(sha, value, true)
+		cache.IsDirty = true
+
+		return sha
+	}
+
+	return v
+}
+
+func (cache *Cache) Put(v interface{}) interface{} {
+	return cache.PutValue(v, false)
+}
+
+func (cache *Cache) Get(key []byte) *ethutil.Value {
+	// First check if the key is the cache
+	if cache.nodes[string(key)] != nil {
+		return cache.nodes[string(key)].Value
+	}
+
+	// Get the key of the database instead and cache it
+	data, _ := cache.db.Get(key)
+	// Create the cached value
+	value := ethutil.NewValueFromBytes(data)
+
+	defer func() {
+		if r := recover(); r != nil {
+			fmt.Println("RECOVER GET", cache, cache.nodes)
+			panic("bye")
+		}
+	}()
+	// Create caching node
+	cache.nodes[string(key)] = NewNode(key, value, true)
+
+	return value
+}
+
+func (cache *Cache) Delete(key []byte) {
+	delete(cache.nodes, string(key))
+
+	cache.db.Delete(key)
+}
+
+func (cache *Cache) Commit() {
+	// Don't try to commit if it isn't dirty
+	if !cache.IsDirty {
+		return
+	}
+
+	for key, node := range cache.nodes {
+		if node.Dirty {
+			cache.db.Put([]byte(key), node.Value.Encode())
+			node.Dirty = false
+		}
+	}
+	cache.IsDirty = false
+
+	// If the nodes grows beyond the 200 entries we simple empty it
+	// FIXME come up with something better
+	if len(cache.nodes) > 200 {
+		cache.nodes = make(map[string]*Node)
+	}
+}
+
+func (cache *Cache) Undo() {
+	for key, node := range cache.nodes {
+		if node.Dirty {
+			delete(cache.nodes, key)
+		}
+	}
+	cache.IsDirty = false
+}
+
+// A (modified) Radix Trie implementation. The Trie implements
+// a caching mechanism and will used cached values if they are
+// present. If a node is not present in the cache it will try to
+// fetch it from the database and store the cached value.
+// Please note that the data isn't persisted unless `Sync` is
+// explicitly called.
+type Trie struct {
+	mut      sync.RWMutex
+	prevRoot interface{}
+	Root     interface{}
+	//db   Database
+	cache *Cache
+}
+
+func copyRoot(root interface{}) interface{} {
+	var prevRootCopy interface{}
+	if b, ok := root.([]byte); ok {
+		prevRootCopy = ethutil.CopyBytes(b)
+	} else {
+		prevRootCopy = root
+	}
+
+	return prevRootCopy
+}
+
+func New(db ethutil.Database, Root interface{}) *Trie {
+	// Make absolute sure the root is copied
+	r := copyRoot(Root)
+	p := copyRoot(Root)
+
+	trie := &Trie{cache: NewCache(db), Root: r, prevRoot: p}
+	trie.setRoot(Root)
+
+	return trie
+}
+
+func (self *Trie) setRoot(root interface{}) {
+	switch t := root.(type) {
+	case string:
+		/*
+			if t == "" {
+				root = crypto.Sha3(ethutil.Encode(""))
+			}
+		*/
+		self.Root = []byte(t)
+	case []byte:
+		self.Root = root
+	default:
+		self.Root = self.cache.PutValue(root, true)
+	}
+}
+
+/*
+ * Public (query) interface functions
+ */
+
+func (t *Trie) Update(key, value string) {
+	t.mut.Lock()
+	defer t.mut.Unlock()
+
+	k := CompactHexDecode(key)
+
+	var root interface{}
+	if value != "" {
+		root = t.UpdateState(t.Root, k, value)
+	} else {
+		root = t.deleteState(t.Root, k)
+	}
+	t.setRoot(root)
+}
+
+func (t *Trie) Get(key string) string {
+	t.mut.Lock()
+	defer t.mut.Unlock()
+
+	k := CompactHexDecode(key)
+	c := ethutil.NewValue(t.getState(t.Root, k))
+
+	return c.Str()
+}
+
+func (t *Trie) Delete(key string) {
+	t.mut.Lock()
+	defer t.mut.Unlock()
+
+	k := CompactHexDecode(key)
+
+	root := t.deleteState(t.Root, k)
+	t.setRoot(root)
+}
+
+func (self *Trie) GetRoot() []byte {
+	switch t := self.Root.(type) {
+	case string:
+		if t == "" {
+			return crypto.Sha3(ethutil.Encode(""))
+		}
+		return []byte(t)
+	case []byte:
+		if len(t) == 0 {
+			return crypto.Sha3(ethutil.Encode(""))
+		}
+
+		return t
+	default:
+		panic(fmt.Sprintf("invalid root type %T (%v)", self.Root, self.Root))
+	}
+}
+
+// Simple compare function which creates a rlp value out of the evaluated objects
+func (t *Trie) Cmp(trie *Trie) bool {
+	return ethutil.NewValue(t.Root).Cmp(ethutil.NewValue(trie.Root))
+}
+
+// Returns a copy of this trie
+func (t *Trie) Copy() *Trie {
+	trie := New(t.cache.db, t.Root)
+	for key, node := range t.cache.nodes {
+		trie.cache.nodes[key] = node.Copy()
+	}
+
+	return trie
+}
+
+// Save the cached value to the database.
+func (t *Trie) Sync() {
+	t.cache.Commit()
+	t.prevRoot = copyRoot(t.Root)
+}
+
+func (t *Trie) Undo() {
+	t.cache.Undo()
+	t.Root = t.prevRoot
+}
+
+func (t *Trie) Cache() *Cache {
+	return t.cache
+}
+
+func (t *Trie) getState(node interface{}, key []byte) interface{} {
+	n := ethutil.NewValue(node)
+	// Return the node if key is empty (= found)
+	if len(key) == 0 || n.IsNil() || n.Len() == 0 {
+		return node
+	}
+
+	currentNode := t.getNode(node)
+	length := currentNode.Len()
+
+	if length == 0 {
+		return ""
+	} else if length == 2 {
+		// Decode the key
+		k := CompactDecode(currentNode.Get(0).Str())
+		v := currentNode.Get(1).Raw()
+
+		if len(key) >= len(k) && bytes.Equal(k, key[:len(k)]) { //CompareIntSlice(k, key[:len(k)]) {
+			return t.getState(v, key[len(k):])
+		} else {
+			return ""
+		}
+	} else if length == 17 {
+		return t.getState(currentNode.Get(int(key[0])).Raw(), key[1:])
+	}
+
+	// It shouldn't come this far
+	panic("unexpected return")
+}
+
+func (t *Trie) getNode(node interface{}) *ethutil.Value {
+	n := ethutil.NewValue(node)
+
+	if !n.Get(0).IsNil() {
+		return n
+	}
+
+	str := n.Str()
+	if len(str) == 0 {
+		return n
+	} else if len(str) < 32 {
+		return ethutil.NewValueFromBytes([]byte(str))
+	}
+
+	data := t.cache.Get(n.Bytes())
+
+	return data
+}
+
+func (t *Trie) UpdateState(node interface{}, key []byte, value string) interface{} {
+	return t.InsertState(node, key, value)
+}
+
+func (t *Trie) Put(node interface{}) interface{} {
+	return t.cache.Put(node)
+
+}
+
+func EmptyStringSlice(l int) []interface{} {
+	slice := make([]interface{}, l)
+	for i := 0; i < l; i++ {
+		slice[i] = ""
+	}
+	return slice
+}
+
+func (t *Trie) InsertState(node interface{}, key []byte, value interface{}) interface{} {
+	if len(key) == 0 {
+		return value
+	}
+
+	// New node
+	n := ethutil.NewValue(node)
+	if node == nil || n.Len() == 0 {
+		newNode := []interface{}{CompactEncode(key), value}
+
+		return t.Put(newNode)
+	}
+
+	currentNode := t.getNode(node)
+	// Check for "special" 2 slice type node
+	if currentNode.Len() == 2 {
+		// Decode the key
+
+		k := CompactDecode(currentNode.Get(0).Str())
+		v := currentNode.Get(1).Raw()
+
+		// Matching key pair (ie. there's already an object with this key)
+		if bytes.Equal(k, key) { //CompareIntSlice(k, key) {
+			newNode := []interface{}{CompactEncode(key), value}
+			return t.Put(newNode)
+		}
+
+		var newHash interface{}
+		matchingLength := MatchingNibbleLength(key, k)
+		if matchingLength == len(k) {
+			// Insert the hash, creating a new node
+			newHash = t.InsertState(v, key[matchingLength:], value)
+		} else {
+			// Expand the 2 length slice to a 17 length slice
+			oldNode := t.InsertState("", k[matchingLength+1:], v)
+			newNode := t.InsertState("", key[matchingLength+1:], value)
+			// Create an expanded slice
+			scaledSlice := EmptyStringSlice(17)
+			// Set the copied and new node
+			scaledSlice[k[matchingLength]] = oldNode
+			scaledSlice[key[matchingLength]] = newNode
+
+			newHash = t.Put(scaledSlice)
+		}
+
+		if matchingLength == 0 {
+			// End of the chain, return
+			return newHash
+		} else {
+			newNode := []interface{}{CompactEncode(key[:matchingLength]), newHash}
+			return t.Put(newNode)
+		}
+	} else {
+
+		// Copy the current node over to the new node and replace the first nibble in the key
+		newNode := EmptyStringSlice(17)
+
+		for i := 0; i < 17; i++ {
+			cpy := currentNode.Get(i).Raw()
+			if cpy != nil {
+				newNode[i] = cpy
+			}
+		}
+
+		newNode[key[0]] = t.InsertState(currentNode.Get(int(key[0])).Raw(), key[1:], value)
+
+		return t.Put(newNode)
+	}
+
+	panic("unexpected end")
+}
+
+func (t *Trie) deleteState(node interface{}, key []byte) interface{} {
+	if len(key) == 0 {
+		return ""
+	}
+
+	// New node
+	n := ethutil.NewValue(node)
+	//if node == nil || (n.Type() == reflect.String && (n.Str() == "" || n.Get(0).IsNil())) || n.Len() == 0 {
+	if node == nil || n.Len() == 0 {
+		//return nil
+		//fmt.Printf("<empty ret> %x %d\n", n, len(n.Bytes()))
+
+		return ""
+	}
+
+	currentNode := t.getNode(node)
+	// Check for "special" 2 slice type node
+	if currentNode.Len() == 2 {
+		// Decode the key
+		k := CompactDecode(currentNode.Get(0).Str())
+		v := currentNode.Get(1).Raw()
+
+		// Matching key pair (ie. there's already an object with this key)
+		if bytes.Equal(k, key) { //CompareIntSlice(k, key) {
+			//fmt.Printf("<delete ret> %x\n", v)
+
+			return ""
+		} else if bytes.Equal(key[:len(k)], k) { //CompareIntSlice(key[:len(k)], k) {
+			hash := t.deleteState(v, key[len(k):])
+			child := t.getNode(hash)
+
+			var newNode []interface{}
+			if child.Len() == 2 {
+				newKey := append(k, CompactDecode(child.Get(0).Str())...)
+				newNode = []interface{}{CompactEncode(newKey), child.Get(1).Raw()}
+			} else {
+				newNode = []interface{}{currentNode.Get(0).Str(), hash}
+			}
+
+			//fmt.Printf("%x\n", newNode)
+
+			return t.Put(newNode)
+		} else {
+			return node
+		}
+	} else {
+		// Copy the current node over to the new node and replace the first nibble in the key
+		n := EmptyStringSlice(17)
+		var newNode []interface{}
+
+		for i := 0; i < 17; i++ {
+			cpy := currentNode.Get(i).Raw()
+			if cpy != nil {
+				n[i] = cpy
+			}
+		}
+
+		n[key[0]] = t.deleteState(n[key[0]], key[1:])
+		amount := -1
+		for i := 0; i < 17; i++ {
+			if n[i] != "" {
+				if amount == -1 {
+					amount = i
+				} else {
+					amount = -2
+				}
+			}
+		}
+		if amount == 16 {
+			newNode = []interface{}{CompactEncode([]byte{16}), n[amount]}
+		} else if amount >= 0 {
+			child := t.getNode(n[amount])
+			if child.Len() == 17 {
+				newNode = []interface{}{CompactEncode([]byte{byte(amount)}), n[amount]}
+			} else if child.Len() == 2 {
+				key := append([]byte{byte(amount)}, CompactDecode(child.Get(0).Str())...)
+				newNode = []interface{}{CompactEncode(key), child.Get(1).Str()}
+			}
+
+		} else {
+			newNode = n
+		}
+
+		//fmt.Printf("%x\n", newNode)
+		return t.Put(newNode)
+	}
+
+	panic("unexpected return")
+}
+
+type TrieIterator struct {
+	trie  *Trie
+	key   string
+	value string
+
+	shas   [][]byte
+	values []string
+
+	lastNode []byte
+}
+
+func (t *Trie) NewIterator() *TrieIterator {
+	return &TrieIterator{trie: t}
+}
+
+func (self *Trie) Iterator() *Iterator {
+	return NewIterator(self)
+}
+
+// Some time in the near future this will need refactoring :-)
+// XXX Note to self, IsSlice == inline node. Str == sha3 to node
+func (it *TrieIterator) workNode(currentNode *ethutil.Value) {
+	if currentNode.Len() == 2 {
+		k := CompactDecode(currentNode.Get(0).Str())
+
+		if currentNode.Get(1).Str() == "" {
+			it.workNode(currentNode.Get(1))
+		} else {
+			if k[len(k)-1] == 16 {
+				it.values = append(it.values, currentNode.Get(1).Str())
+			} else {
+				it.shas = append(it.shas, currentNode.Get(1).Bytes())
+				it.getNode(currentNode.Get(1).Bytes())
+			}
+		}
+	} else {
+		for i := 0; i < currentNode.Len(); i++ {
+			if i == 16 && currentNode.Get(i).Len() != 0 {
+				it.values = append(it.values, currentNode.Get(i).Str())
+			} else {
+				if currentNode.Get(i).Str() == "" {
+					it.workNode(currentNode.Get(i))
+				} else {
+					val := currentNode.Get(i).Str()
+					if val != "" {
+						it.shas = append(it.shas, currentNode.Get(1).Bytes())
+						it.getNode([]byte(val))
+					}
+				}
+			}
+		}
+	}
+}
+
+func (it *TrieIterator) getNode(node []byte) {
+	currentNode := it.trie.cache.Get(node)
+	it.workNode(currentNode)
+}
+
+func (it *TrieIterator) Collect() [][]byte {
+	if it.trie.Root == "" {
+		return nil
+	}
+
+	it.getNode(ethutil.NewValue(it.trie.Root).Bytes())
+
+	return it.shas
+}
+
+func (it *TrieIterator) Purge() int {
+	shas := it.Collect()
+	for _, sha := range shas {
+		it.trie.cache.Delete(sha)
+	}
+	return len(it.values)
+}
+
+func (it *TrieIterator) Key() string {
+	return ""
+}
+
+func (it *TrieIterator) Value() string {
+	return ""
+}
+
+type EachCallback func(key string, node *ethutil.Value)
+
+func (it *TrieIterator) Each(cb EachCallback) {
+	it.fetchNode(nil, ethutil.NewValue(it.trie.Root).Bytes(), cb)
+}
+
+func (it *TrieIterator) fetchNode(key []byte, node []byte, cb EachCallback) {
+	it.iterateNode(key, it.trie.cache.Get(node), cb)
+}
+
+func (it *TrieIterator) iterateNode(key []byte, currentNode *ethutil.Value, cb EachCallback) {
+	if currentNode.Len() == 2 {
+		k := CompactDecode(currentNode.Get(0).Str())
+
+		pk := append(key, k...)
+		if currentNode.Get(1).Len() != 0 && currentNode.Get(1).Str() == "" {
+			it.iterateNode(pk, currentNode.Get(1), cb)
+		} else {
+			if k[len(k)-1] == 16 {
+				cb(DecodeCompact(pk), currentNode.Get(1))
+			} else {
+				it.fetchNode(pk, currentNode.Get(1).Bytes(), cb)
+			}
+		}
+	} else {
+		for i := 0; i < currentNode.Len(); i++ {
+			pk := append(key, byte(i))
+			if i == 16 && currentNode.Get(i).Len() != 0 {
+				cb(DecodeCompact(pk), currentNode.Get(i))
+			} else {
+				if currentNode.Get(i).Len() != 0 && currentNode.Get(i).Str() == "" {
+					it.iterateNode(pk, currentNode.Get(i), cb)
+				} else {
+					val := currentNode.Get(i).Str()
+					if val != "" {
+						it.fetchNode(pk, []byte(val), cb)
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/trie/trie_test.go b/trie/trie_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..207d41f30d2e344ee216f3644a2c46eb2beb2884
--- /dev/null
+++ b/trie/trie_test.go
@@ -0,0 +1,447 @@
+package trie
+
+import (
+	"bytes"
+	"encoding/hex"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"math/rand"
+	"net/http"
+	"testing"
+	"time"
+
+	checker "gopkg.in/check.v1"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+const LONG_WORD = "1234567890abcdefghijklmnopqrstuvwxxzABCEFGHIJKLMNOPQRSTUVWXYZ"
+
+type TrieSuite struct {
+	db   *MemDatabase
+	trie *Trie
+}
+
+type MemDatabase struct {
+	db map[string][]byte
+}
+
+func NewMemDatabase() (*MemDatabase, error) {
+	db := &MemDatabase{db: make(map[string][]byte)}
+	return db, nil
+}
+func (db *MemDatabase) Put(key []byte, value []byte) {
+	db.db[string(key)] = value
+}
+func (db *MemDatabase) Get(key []byte) ([]byte, error) {
+	return db.db[string(key)], nil
+}
+func (db *MemDatabase) Delete(key []byte) error {
+	delete(db.db, string(key))
+	return nil
+}
+func (db *MemDatabase) Print()              {}
+func (db *MemDatabase) Close()              {}
+func (db *MemDatabase) LastKnownTD() []byte { return nil }
+
+func NewTrie() (*MemDatabase, *Trie) {
+	db, _ := NewMemDatabase()
+	return db, New(db, "")
+}
+
+func (s *TrieSuite) SetUpTest(c *checker.C) {
+	s.db, s.trie = NewTrie()
+}
+
+func (s *TrieSuite) TestTrieSync(c *checker.C) {
+	s.trie.Update("dog", LONG_WORD)
+	c.Assert(s.db.db, checker.HasLen, 0, checker.Commentf("Expected no data in database"))
+	s.trie.Sync()
+	c.Assert(s.db.db, checker.HasLen, 3)
+}
+
+func (s *TrieSuite) TestTrieDirtyTracking(c *checker.C) {
+	s.trie.Update("dog", LONG_WORD)
+	c.Assert(s.trie.cache.IsDirty, checker.Equals, true, checker.Commentf("Expected no data in database"))
+
+	s.trie.Sync()
+	c.Assert(s.trie.cache.IsDirty, checker.Equals, false, checker.Commentf("Expected trie to be dirty"))
+
+	s.trie.Update("test", LONG_WORD)
+	s.trie.cache.Undo()
+	c.Assert(s.trie.cache.IsDirty, checker.Equals, false)
+}
+
+func (s *TrieSuite) TestTrieReset(c *checker.C) {
+	s.trie.Update("cat", LONG_WORD)
+	c.Assert(s.trie.cache.nodes, checker.HasLen, 1, checker.Commentf("Expected cached nodes"))
+
+	s.trie.cache.Undo()
+	c.Assert(s.trie.cache.nodes, checker.HasLen, 0, checker.Commentf("Expected no nodes after undo"))
+}
+
+func (s *TrieSuite) TestTrieGet(c *checker.C) {
+	s.trie.Update("cat", LONG_WORD)
+	x := s.trie.Get("cat")
+	c.Assert(x, checker.DeepEquals, LONG_WORD)
+}
+
+func (s *TrieSuite) TestTrieUpdating(c *checker.C) {
+	s.trie.Update("cat", LONG_WORD)
+	s.trie.Update("cat", LONG_WORD+"1")
+	x := s.trie.Get("cat")
+	c.Assert(x, checker.DeepEquals, LONG_WORD+"1")
+}
+
+func (s *TrieSuite) TestTrieCmp(c *checker.C) {
+	_, trie1 := NewTrie()
+	_, trie2 := NewTrie()
+
+	trie1.Update("doge", LONG_WORD)
+	trie2.Update("doge", LONG_WORD)
+	c.Assert(trie1, checker.DeepEquals, trie2)
+
+	trie1.Update("dog", LONG_WORD)
+	trie2.Update("cat", LONG_WORD)
+	c.Assert(trie1, checker.Not(checker.DeepEquals), trie2)
+}
+
+func (s *TrieSuite) TestTrieDelete(c *checker.C) {
+	s.trie.Update("cat", LONG_WORD)
+	exp := s.trie.Root
+	s.trie.Update("dog", LONG_WORD)
+	s.trie.Delete("dog")
+	c.Assert(s.trie.Root, checker.DeepEquals, exp)
+
+	s.trie.Update("dog", LONG_WORD)
+	exp = s.trie.Root
+	s.trie.Update("dude", LONG_WORD)
+	s.trie.Delete("dude")
+	c.Assert(s.trie.Root, checker.DeepEquals, exp)
+}
+
+func (s *TrieSuite) TestTrieDeleteWithValue(c *checker.C) {
+	s.trie.Update("c", LONG_WORD)
+	exp := s.trie.Root
+	s.trie.Update("ca", LONG_WORD)
+	s.trie.Update("cat", LONG_WORD)
+	s.trie.Delete("ca")
+	s.trie.Delete("cat")
+	c.Assert(s.trie.Root, checker.DeepEquals, exp)
+}
+
+func (s *TrieSuite) TestTriePurge(c *checker.C) {
+	s.trie.Update("c", LONG_WORD)
+	s.trie.Update("ca", LONG_WORD)
+	s.trie.Update("cat", LONG_WORD)
+
+	lenBefore := len(s.trie.cache.nodes)
+	it := s.trie.NewIterator()
+	num := it.Purge()
+	c.Assert(num, checker.Equals, 3)
+	c.Assert(len(s.trie.cache.nodes), checker.Equals, lenBefore)
+}
+
+func h(str string) string {
+	d, err := hex.DecodeString(str)
+	if err != nil {
+		panic(err)
+	}
+
+	return string(d)
+}
+
+func get(in string) (out string) {
+	if len(in) > 2 && in[:2] == "0x" {
+		out = h(in[2:])
+	} else {
+		out = in
+	}
+
+	return
+}
+
+type TrieTest struct {
+	Name string
+	In   map[string]string
+	Root string
+}
+
+func CreateTest(name string, data []byte) (TrieTest, error) {
+	t := TrieTest{Name: name}
+	err := json.Unmarshal(data, &t)
+	if err != nil {
+		return TrieTest{}, fmt.Errorf("%v", err)
+	}
+
+	return t, nil
+}
+
+func CreateTests(uri string, cb func(TrieTest)) map[string]TrieTest {
+	resp, err := http.Get(uri)
+	if err != nil {
+		panic(err)
+	}
+	defer resp.Body.Close()
+
+	data, err := ioutil.ReadAll(resp.Body)
+
+	var objmap map[string]*json.RawMessage
+	err = json.Unmarshal(data, &objmap)
+	if err != nil {
+		panic(err)
+	}
+
+	tests := make(map[string]TrieTest)
+	for name, testData := range objmap {
+		test, err := CreateTest(name, *testData)
+		if err != nil {
+			panic(err)
+		}
+
+		if cb != nil {
+			cb(test)
+		}
+		tests[name] = test
+	}
+
+	return tests
+}
+
+func RandomData() [][]string {
+	data := [][]string{
+		{"0x000000000000000000000000ec4f34c97e43fbb2816cfd95e388353c7181dab1", "0x4e616d6552656700000000000000000000000000000000000000000000000000"},
+		{"0x0000000000000000000000000000000000000000000000000000000000000045", "0x22b224a1420a802ab51d326e29fa98e34c4f24ea"},
+		{"0x0000000000000000000000000000000000000000000000000000000000000046", "0x67706c2076330000000000000000000000000000000000000000000000000000"},
+		{"0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000"},
+		{"0x0000000000000000000000007ef9e639e2733cb34e4dfc576d4b23f72db776b2", "0x4655474156000000000000000000000000000000000000000000000000000000"},
+		{"0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000", "0x697c7b8c961b56f675d570498424ac8de1a918f6"},
+		{"0x4655474156000000000000000000000000000000000000000000000000000000", "0x7ef9e639e2733cb34e4dfc576d4b23f72db776b2"},
+		{"0x4e616d6552656700000000000000000000000000000000000000000000000000", "0xec4f34c97e43fbb2816cfd95e388353c7181dab1"},
+	}
+
+	var c [][]string
+	for len(data) != 0 {
+		e := rand.Intn(len(data))
+		c = append(c, data[e])
+
+		copy(data[e:], data[e+1:])
+		data[len(data)-1] = nil
+		data = data[:len(data)-1]
+	}
+
+	return c
+}
+
+const MaxTest = 1000
+
+// This test insert data in random order and seeks to find indifferences between the different tries
+func (s *TrieSuite) TestRegression(c *checker.C) {
+	rand.Seed(time.Now().Unix())
+
+	roots := make(map[string]int)
+	for i := 0; i < MaxTest; i++ {
+		_, trie := NewTrie()
+		data := RandomData()
+
+		for _, test := range data {
+			trie.Update(test[0], test[1])
+		}
+		trie.Delete("0x4e616d6552656700000000000000000000000000000000000000000000000000")
+
+		roots[string(trie.Root.([]byte))] += 1
+	}
+
+	c.Assert(len(roots) <= 1, checker.Equals, true)
+	// if len(roots) > 1 {
+	// 	for root, num := range roots {
+	// 		t.Errorf("%x => %d\n", root, num)
+	// 	}
+	// }
+}
+
+func (s *TrieSuite) TestDelete(c *checker.C) {
+	s.trie.Update("a", "jeffreytestlongstring")
+	s.trie.Update("aa", "otherstring")
+	s.trie.Update("aaa", "othermorestring")
+	s.trie.Update("aabbbbccc", "hithere")
+	s.trie.Update("abbcccdd", "hstanoehutnaheoustnh")
+	s.trie.Update("rnthaoeuabbcccdd", "hstanoehutnaheoustnh")
+	s.trie.Update("rneuabbcccdd", "hstanoehutnaheoustnh")
+	s.trie.Update("rneuabboeusntahoeucccdd", "hstanoehutnaheoustnh")
+	s.trie.Update("rnxabboeusntahoeucccdd", "hstanoehutnaheoustnh")
+	s.trie.Delete("aaboaestnuhbccc")
+	s.trie.Delete("a")
+	s.trie.Update("a", "nthaonethaosentuh")
+	s.trie.Update("c", "shtaosntehua")
+	s.trie.Delete("a")
+	s.trie.Update("aaaa", "testmegood")
+
+	_, t2 := NewTrie()
+	s.trie.NewIterator().Each(func(key string, v *ethutil.Value) {
+		if key == "aaaa" {
+			t2.Update(key, v.Str())
+		} else {
+			t2.Update(key, v.Str())
+		}
+	})
+
+	a := ethutil.NewValue(s.trie.Root).Bytes()
+	b := ethutil.NewValue(t2.Root).Bytes()
+
+	c.Assert(a, checker.DeepEquals, b)
+}
+
+func (s *TrieSuite) TestTerminator(c *checker.C) {
+	key := CompactDecode("hello")
+	c.Assert(HasTerm(key), checker.Equals, true, checker.Commentf("Expected %v to have a terminator", key))
+}
+
+func (s *TrieSuite) TestIt(c *checker.C) {
+	s.trie.Update("cat", "cat")
+	s.trie.Update("doge", "doge")
+	s.trie.Update("wallace", "wallace")
+	it := s.trie.Iterator()
+
+	inputs := []struct {
+		In, Out string
+	}{
+		{"", "cat"},
+		{"bobo", "cat"},
+		{"c", "cat"},
+		{"car", "cat"},
+		{"catering", "doge"},
+		{"w", "wallace"},
+		{"wallace123", ""},
+	}
+
+	for _, test := range inputs {
+		res := string(it.Next(test.In))
+		c.Assert(res, checker.Equals, test.Out)
+	}
+}
+
+func (s *TrieSuite) TestBeginsWith(c *checker.C) {
+	a := CompactDecode("hello")
+	b := CompactDecode("hel")
+
+	c.Assert(BeginsWith(a, b), checker.Equals, false)
+	c.Assert(BeginsWith(b, a), checker.Equals, true)
+}
+
+func (s *TrieSuite) TestItems(c *checker.C) {
+	s.trie.Update("A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+	exp := "d23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab"
+
+	c.Assert(s.trie.GetRoot(), checker.DeepEquals, ethutil.Hex2Bytes(exp))
+}
+
+/*
+func TestRndCase(t *testing.T) {
+	_, trie := NewTrie()
+
+	data := []struct{ k, v string }{
+		{"0000000000000000000000000000000000000000000000000000000000000001", "a07573657264617461000000000000000000000000000000000000000000000000"},
+		{"0000000000000000000000000000000000000000000000000000000000000003", "8453bb5b31"},
+		{"0000000000000000000000000000000000000000000000000000000000000004", "850218711a00"},
+		{"0000000000000000000000000000000000000000000000000000000000000005", "9462d7705bd0b3ecbc51a8026a25597cb28a650c79"},
+		{"0000000000000000000000000000000000000000000000000000000000000010", "947e70f9460402290a3e487dae01f610a1a8218fda"},
+		{"0000000000000000000000000000000000000000000000000000000000000111", "01"},
+		{"0000000000000000000000000000000000000000000000000000000000000112", "a053656e6174650000000000000000000000000000000000000000000000000000"},
+		{"0000000000000000000000000000000000000000000000000000000000000113", "a053656e6174650000000000000000000000000000000000000000000000000000"},
+		{"53656e6174650000000000000000000000000000000000000000000000000000", "94977e3f62f5e1ed7953697430303a3cfa2b5b736e"},
+	}
+	for _, e := range data {
+		trie.Update(string(ethutil.Hex2Bytes(e.k)), string(ethutil.Hex2Bytes(e.v)))
+	}
+
+	fmt.Printf("root after update %x\n", trie.Root)
+	trie.NewIterator().Each(func(k string, v *ethutil.Value) {
+		fmt.Printf("%x %x\n", k, v.Bytes())
+	})
+
+	data = []struct{ k, v string }{
+		{"0000000000000000000000000000000000000000000000000000000000000112", ""},
+		{"436974697a656e73000000000000000000000000000000000000000000000001", ""},
+		{"436f757274000000000000000000000000000000000000000000000000000002", ""},
+		{"53656e6174650000000000000000000000000000000000000000000000000000", ""},
+		{"436f757274000000000000000000000000000000000000000000000000000000", ""},
+		{"53656e6174650000000000000000000000000000000000000000000000000001", ""},
+		{"0000000000000000000000000000000000000000000000000000000000000113", ""},
+		{"436974697a656e73000000000000000000000000000000000000000000000000", ""},
+		{"436974697a656e73000000000000000000000000000000000000000000000002", ""},
+		{"436f757274000000000000000000000000000000000000000000000000000001", ""},
+		{"0000000000000000000000000000000000000000000000000000000000000111", ""},
+		{"53656e6174650000000000000000000000000000000000000000000000000002", ""},
+	}
+
+	for _, e := range data {
+		trie.Delete(string(ethutil.Hex2Bytes(e.k)))
+	}
+
+	fmt.Printf("root after delete %x\n", trie.Root)
+
+	trie.NewIterator().Each(func(k string, v *ethutil.Value) {
+		fmt.Printf("%x %x\n", k, v.Bytes())
+	})
+
+	fmt.Printf("%x\n", trie.Get(string(ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))))
+}
+*/
+
+func TestOtherSomething(t *testing.T) {
+	_, trie := NewTrie()
+
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+	}
+	for _, val := range vals {
+		trie.Update(val.k, val.v)
+	}
+
+	exp := ethutil.Hex2Bytes("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84")
+	hash := trie.Root.([]byte)
+	if !bytes.Equal(hash, exp) {
+		t.Errorf("expected %x got %x", exp, hash)
+	}
+}
+
+func BenchmarkGets(b *testing.B) {
+	_, trie := NewTrie()
+	vals := []struct{ k, v string }{
+		{"do", "verb"},
+		{"ether", "wookiedoo"},
+		{"horse", "stallion"},
+		{"shaman", "horse"},
+		{"doge", "coin"},
+		{"ether", ""},
+		{"dog", "puppy"},
+		{"shaman", ""},
+		{"somethingveryoddindeedthis is", "myothernodedata"},
+	}
+	for _, val := range vals {
+		trie.Update(val.k, val.v)
+	}
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.Get("horse")
+	}
+}
+
+func BenchmarkUpdate(b *testing.B) {
+	_, trie := NewTrie()
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		trie.Update(fmt.Sprintf("aaaaaaaaaaaaaaa%d", i), "value")
+	}
+}
diff --git a/types/ethereum.go b/types/ethereum.go
new file mode 100644
index 0000000000000000000000000000000000000000..ab1254f4c2bef8c6f41f1042ec2fbd3381d1bea8
--- /dev/null
+++ b/types/ethereum.go
@@ -0,0 +1 @@
+package types
diff --git a/ui/filter.go b/ui/filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..88faad5caa2b91689f30715c3bd0fbfaa996b0be
--- /dev/null
+++ b/ui/filter.go
@@ -0,0 +1,75 @@
+package ui
+
+import (
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter {
+	filter := core.NewFilter(eth)
+
+	if object["earliest"] != nil {
+		val := ethutil.NewValue(object["earliest"])
+		filter.SetEarliestBlock(val.Int())
+	}
+
+	if object["latest"] != nil {
+		val := ethutil.NewValue(object["latest"])
+		filter.SetLatestBlock(val.Int())
+	}
+
+	if object["to"] != nil {
+		val := ethutil.NewValue(object["to"])
+		filter.AddTo(ethutil.Hex2Bytes(val.Str()))
+	}
+
+	if object["from"] != nil {
+		val := ethutil.NewValue(object["from"])
+		filter.AddFrom(ethutil.Hex2Bytes(val.Str()))
+	}
+
+	if object["max"] != nil {
+		val := ethutil.NewValue(object["max"])
+		filter.SetMax(int(val.Uint()))
+	}
+
+	if object["skip"] != nil {
+		val := ethutil.NewValue(object["skip"])
+		filter.SetSkip(int(val.Uint()))
+	}
+
+	if object["altered"] != nil {
+		filter.Altered = makeAltered(object["altered"])
+	}
+
+	return filter
+}
+
+// Conversion methodn
+func mapToAccountChange(m map[string]interface{}) (d core.AccountChange) {
+	if str, ok := m["id"].(string); ok {
+		d.Address = ethutil.Hex2Bytes(str)
+	}
+
+	if str, ok := m["at"].(string); ok {
+		d.StateAddress = ethutil.Hex2Bytes(str)
+	}
+
+	return
+}
+
+// data can come in in the following formats:
+// ["aabbccdd", {id: "ccddee", at: "11223344"}], "aabbcc", {id: "ccddee", at: "1122"}
+func makeAltered(v interface{}) (d []core.AccountChange) {
+	if str, ok := v.(string); ok {
+		d = append(d, core.AccountChange{ethutil.Hex2Bytes(str), nil})
+	} else if obj, ok := v.(map[string]interface{}); ok {
+		d = append(d, mapToAccountChange(obj))
+	} else if slice, ok := v.([]interface{}); ok {
+		for _, item := range slice {
+			d = append(d, makeAltered(item)...)
+		}
+	}
+
+	return
+}
diff --git a/ui/qt/filter.go b/ui/qt/filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..c689364016fa063554ac2cadc31ee9921775bca8
--- /dev/null
+++ b/ui/qt/filter.go
@@ -0,0 +1,38 @@
+package qt
+
+import (
+	"fmt"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/ui"
+	"gopkg.in/qml.v1"
+)
+
+func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter {
+	filter := ui.NewFilterFromMap(object, eth)
+
+	if object["altered"] != nil {
+		filter.Altered = makeAltered(object["altered"])
+	}
+
+	return filter
+}
+
+func makeAltered(v interface{}) (d []core.AccountChange) {
+	if qList, ok := v.(*qml.List); ok {
+		var s []interface{}
+		qList.Convert(&s)
+
+		fmt.Println(s)
+
+		d = makeAltered(s)
+	} else if qMap, ok := v.(*qml.Map); ok {
+		var m map[string]interface{}
+		qMap.Convert(&m)
+		fmt.Println(m)
+
+		d = makeAltered(m)
+	}
+
+	return
+}
diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go
new file mode 100644
index 0000000000000000000000000000000000000000..bed23c8a7c646784591d73495d5bc4984a134fae
--- /dev/null
+++ b/ui/qt/qwhisper/whisper.go
@@ -0,0 +1,70 @@
+package qwhisper
+
+import (
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/whisper"
+)
+
+func fromHex(s string) []byte {
+	if len(s) > 1 {
+		return ethutil.Hex2Bytes(s[2:])
+	}
+	return nil
+}
+func toHex(b []byte) string { return "0x" + ethutil.Bytes2Hex(b) }
+
+type Whisper struct {
+	*whisper.Whisper
+}
+
+func New(w *whisper.Whisper) *Whisper {
+	return &Whisper{w}
+}
+
+func (self *Whisper) Post(data string, pow, ttl uint32, to, from string) {
+	msg := whisper.NewMessage(fromHex(data))
+	envelope, err := msg.Seal(time.Duration(pow), whisper.Opts{
+		Ttl:  time.Duration(ttl),
+		To:   crypto.ToECDSAPub(fromHex(to)),
+		From: crypto.ToECDSA(fromHex(from)),
+	})
+	if err != nil {
+		// handle error
+		return
+	}
+
+	if err := self.Whisper.Send(envelope); err != nil {
+		// handle error
+		return
+	}
+}
+
+func (self *Whisper) NewIdentity() string {
+	return toHex(self.Whisper.NewIdentity().D.Bytes())
+}
+
+func (self *Whisper) HasIdentify(key string) bool {
+	return self.Whisper.HasIdentity(crypto.ToECDSA(fromHex(key)))
+}
+
+func (self *Whisper) Watch(opts map[string]interface{}) {
+	filter := filterFromMap(opts)
+	filter.Fn = func(msg *whisper.Message) {
+		// TODO POST TO QT WINDOW
+	}
+	self.Whisper.Watch(filter)
+}
+
+func filterFromMap(opts map[string]interface{}) (f whisper.Filter) {
+	if to, ok := opts["to"].(string); ok {
+		f.To = crypto.ToECDSA(fromHex(to))
+	}
+	if from, ok := opts["from"].(string); ok {
+		f.From = crypto.ToECDSAPub(fromHex(from))
+	}
+
+	return
+}
diff --git a/utils/vm_env.go b/utils/vm_env.go
deleted file mode 100644
index 30568c421d5af8e07c6dc3e16b7e4b0b7279e329..0000000000000000000000000000000000000000
--- a/utils/vm_env.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package utils
-
-import (
-	"math/big"
-
-	"github.com/ethereum/eth-go/ethchain"
-	"github.com/ethereum/eth-go/ethstate"
-)
-
-type VMEnv struct {
-	state *ethstate.State
-	block *ethchain.Block
-
-	transactor []byte
-	value      *big.Int
-}
-
-func NewEnv(state *ethstate.State, block *ethchain.Block, transactor []byte, value *big.Int) *VMEnv {
-	return &VMEnv{
-		state:      state,
-		block:      block,
-		transactor: transactor,
-		value:      value,
-	}
-}
-
-func (self *VMEnv) Origin() []byte         { return self.transactor }
-func (self *VMEnv) BlockNumber() *big.Int  { return self.block.Number }
-func (self *VMEnv) PrevHash() []byte       { return self.block.PrevHash }
-func (self *VMEnv) Coinbase() []byte       { return self.block.Coinbase }
-func (self *VMEnv) Time() int64            { return self.block.Time }
-func (self *VMEnv) Difficulty() *big.Int   { return self.block.Difficulty }
-func (self *VMEnv) BlockHash() []byte      { return self.block.Hash() }
-func (self *VMEnv) Value() *big.Int        { return self.value }
-func (self *VMEnv) State() *ethstate.State { return self.state }
diff --git a/vm/.ethtest b/vm/.ethtest
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/vm/address.go b/vm/address.go
new file mode 100644
index 0000000000000000000000000000000000000000..611979c94137d0b21b35a15c01574878d455265a
--- /dev/null
+++ b/vm/address.go
@@ -0,0 +1,56 @@
+package vm
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+type Address interface {
+	Call(in []byte) []byte
+}
+
+type PrecompiledAccount struct {
+	Gas func(l int) *big.Int
+	fn  func(in []byte) []byte
+}
+
+func (self PrecompiledAccount) Call(in []byte) []byte {
+	return self.fn(in)
+}
+
+var Precompiled = map[string]*PrecompiledAccount{
+	string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int {
+		return GasEcrecover
+	}, ecrecoverFunc},
+	string(ethutil.LeftPadBytes([]byte{2}, 20)): &PrecompiledAccount{func(l int) *big.Int {
+		n := big.NewInt(int64(l+31)/32 + 1)
+		n.Mul(n, GasSha256)
+		return n
+	}, sha256Func},
+	string(ethutil.LeftPadBytes([]byte{3}, 20)): &PrecompiledAccount{func(l int) *big.Int {
+		n := big.NewInt(int64(l+31)/32 + 1)
+		n.Mul(n, GasRipemd)
+		return n
+	}, ripemd160Func},
+}
+
+func sha256Func(in []byte) []byte {
+	return crypto.Sha256(in)
+}
+
+func ripemd160Func(in []byte) []byte {
+	return ethutil.LeftPadBytes(crypto.Ripemd160(in), 32)
+}
+
+func ecrecoverFunc(in []byte) []byte {
+	// In case of an invalid sig. Defaults to return nil
+	defer func() { recover() }()
+
+	hash := in[:32]
+	v := ethutil.BigD(in[32:64]).Bytes()[0] - 27
+	sig := append(in[64:], v)
+
+	return ethutil.LeftPadBytes(crypto.Sha3(crypto.Ecrecover(append(hash, sig...))[1:])[12:], 32)
+}
diff --git a/vm/analysis.go b/vm/analysis.go
new file mode 100644
index 0000000000000000000000000000000000000000..fef448b7ba28d4e9b389aad479ffa7b716d134e6
--- /dev/null
+++ b/vm/analysis.go
@@ -0,0 +1,35 @@
+package vm
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func analyseJumpDests(code []byte) (dests map[uint64]*big.Int) {
+	dests = make(map[uint64]*big.Int)
+
+	lp := false
+	var lpv *big.Int
+	for pc := uint64(0); pc < uint64(len(code)); pc++ {
+		var op OpCode = OpCode(code[pc])
+		switch op {
+		case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
+			a := uint64(op) - uint64(PUSH1) + 1
+			if uint64(len(code)) > pc+1+a {
+				lpv = ethutil.BigD(code[pc+1 : pc+1+a])
+			}
+
+			pc += a
+			lp = true
+		case JUMP, JUMPI:
+			if lp {
+				dests[pc] = lpv
+			}
+
+		default:
+			lp = false
+		}
+	}
+	return
+}
diff --git a/vm/asm.go b/vm/asm.go
new file mode 100644
index 0000000000000000000000000000000000000000..a94f01d3d293d2011cdcdd8579507e416e1f3457
--- /dev/null
+++ b/vm/asm.go
@@ -0,0 +1,45 @@
+package vm
+
+import (
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+func Disassemble(script []byte) (asm []string) {
+	pc := new(big.Int)
+	for {
+		if pc.Cmp(big.NewInt(int64(len(script)))) >= 0 {
+			return
+		}
+
+		// Get the memory location of pc
+		val := script[pc.Int64()]
+		// Get the opcode (it must be an opcode!)
+		op := OpCode(val)
+
+		asm = append(asm, fmt.Sprintf("%v", op))
+
+		switch op {
+		case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
+			pc.Add(pc, ethutil.Big1)
+			a := int64(op) - int64(PUSH1) + 1
+			if int(pc.Int64()+a) > len(script) {
+				return nil
+			}
+
+			data := script[pc.Int64() : pc.Int64()+a]
+			if len(data) == 0 {
+				data = []byte{0}
+			}
+			asm = append(asm, fmt.Sprintf("0x%x", data))
+
+			pc.Add(pc, big.NewInt(a-1))
+		}
+
+		pc.Add(pc, ethutil.Big1)
+	}
+
+	return
+}
diff --git a/vm/closure.go b/vm/closure.go
new file mode 100644
index 0000000000000000000000000000000000000000..97b31ada04a382734c48d5656c3308f225ee0594
--- /dev/null
+++ b/vm/closure.go
@@ -0,0 +1,107 @@
+package vm
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type ClosureRef interface {
+	ReturnGas(*big.Int, *big.Int)
+	Address() []byte
+	SetCode([]byte)
+}
+
+type Closure struct {
+	caller  ClosureRef
+	object  ClosureRef
+	Code    []byte
+	message *state.Message
+
+	Gas, UsedGas, Price *big.Int
+
+	Args []byte
+}
+
+// Create a new closure for the given data items
+func NewClosure(msg *state.Message, caller ClosureRef, object ClosureRef, code []byte, gas, price *big.Int) *Closure {
+	c := &Closure{message: msg, caller: caller, object: object, Code: code, Args: nil}
+
+	// Gas should be a pointer so it can safely be reduced through the run
+	// This pointer will be off the state transition
+	c.Gas = gas //new(big.Int).Set(gas)
+	// In most cases price and value are pointers to transaction objects
+	// and we don't want the transaction's values to change.
+	c.Price = new(big.Int).Set(price)
+	c.UsedGas = new(big.Int)
+
+	return c
+}
+
+func (c *Closure) GetOp(x uint64) OpCode {
+	return OpCode(c.GetByte(x))
+}
+
+func (c *Closure) GetByte(x uint64) byte {
+	if x < uint64(len(c.Code)) {
+		return c.Code[x]
+	}
+
+	return 0
+}
+
+func (c *Closure) GetBytes(x, y int) []byte {
+	if x >= len(c.Code) || y >= len(c.Code) {
+		return nil
+	}
+
+	return c.Code[x : x+y]
+}
+
+func (c *Closure) GetRangeValue(x, y uint64) []byte {
+	if x >= uint64(len(c.Code)) || y >= uint64(len(c.Code)) {
+		return nil
+	}
+
+	return c.Code[x : x+y]
+}
+
+func (c *Closure) Return(ret []byte) []byte {
+	// Return the remaining gas to the caller
+	c.caller.ReturnGas(c.Gas, c.Price)
+
+	return ret
+}
+
+/*
+ * Gas functions
+ */
+func (c *Closure) UseGas(gas *big.Int) bool {
+	if c.Gas.Cmp(gas) < 0 {
+		return false
+	}
+
+	// Sub the amount of gas from the remaining
+	c.Gas.Sub(c.Gas, gas)
+	c.UsedGas.Add(c.UsedGas, gas)
+
+	return true
+}
+
+// Implement the caller interface
+func (c *Closure) ReturnGas(gas, price *big.Int) {
+	// Return the gas to the closure
+	c.Gas.Add(c.Gas, gas)
+	c.UsedGas.Sub(c.UsedGas, gas)
+}
+
+/*
+ * Set / Get
+ */
+func (c *Closure) Address() []byte {
+	return c.object.Address()
+}
+
+func (self *Closure) SetCode(code []byte) {
+	self.Code = code
+}
diff --git a/vm/common.go b/vm/common.go
new file mode 100644
index 0000000000000000000000000000000000000000..529bbdeb185bea5712a6702ab2d05b848dc4a006
--- /dev/null
+++ b/vm/common.go
@@ -0,0 +1,75 @@
+package vm
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+)
+
+var vmlogger = logger.NewLogger("VM")
+
+type Type int
+
+const (
+	StandardVmTy Type = iota
+	DebugVmTy
+
+	MaxVmTy
+)
+
+var (
+	GasStep         = big.NewInt(1)
+	GasSha          = big.NewInt(10)
+	GasSLoad        = big.NewInt(20)
+	GasSStore       = big.NewInt(100)
+	GasSStoreRefund = big.NewInt(100)
+	GasBalance      = big.NewInt(20)
+	GasCreate       = big.NewInt(100)
+	GasCall         = big.NewInt(20)
+	GasCreateByte   = big.NewInt(5)
+	GasSha3Byte     = big.NewInt(10)
+	GasSha256Byte   = big.NewInt(50)
+	GasRipemdByte   = big.NewInt(50)
+	GasMemory       = big.NewInt(1)
+	GasData         = big.NewInt(5)
+	GasTx           = big.NewInt(500)
+	GasLog          = big.NewInt(32)
+	GasSha256       = big.NewInt(50)
+	GasRipemd       = big.NewInt(50)
+	GasEcrecover    = big.NewInt(500)
+
+	Pow256 = ethutil.BigPow(2, 256)
+
+	LogTyPretty byte = 0x1
+	LogTyDiff   byte = 0x2
+
+	U256 = ethutil.U256
+	S256 = ethutil.S256
+)
+
+const MaxCallDepth = 1024
+
+func calcMemSize(off, l *big.Int) *big.Int {
+	if l.Cmp(ethutil.Big0) == 0 {
+		return ethutil.Big0
+	}
+
+	return new(big.Int).Add(off, l)
+}
+
+// Simple helper
+func u256(n int64) *big.Int {
+	return big.NewInt(n)
+}
+
+// Mainly used for print variables and passing to Print*
+func toValue(val *big.Int) interface{} {
+	// Let's assume a string on right padded zero's
+	b := val.Bytes()
+	if b[0] != 0 && b[len(b)-1] == 0x0 && b[len(b)-2] == 0x0 {
+		return string(b)
+	}
+
+	return val
+}
diff --git a/vm/debugger.go b/vm/debugger.go
new file mode 100644
index 0000000000000000000000000000000000000000..9b08634c6b5c357897783ef225af258da0ebb8de
--- /dev/null
+++ b/vm/debugger.go
@@ -0,0 +1,10 @@
+package vm
+
+import "github.com/ethereum/go-ethereum/state"
+
+type Debugger interface {
+	BreakHook(step int, op OpCode, mem *Memory, stack *Stack, object *state.StateObject) bool
+	StepHook(step int, op OpCode, mem *Memory, stack *Stack, object *state.StateObject) bool
+	BreakPoints() []int64
+	SetCode(byteCode []byte)
+}
diff --git a/vm/environment.go b/vm/environment.go
new file mode 100644
index 0000000000000000000000000000000000000000..969bc5e43168b8cde2b0eef179d3a1c604a99089
--- /dev/null
+++ b/vm/environment.go
@@ -0,0 +1,81 @@
+package vm
+
+import (
+	"errors"
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type Environment interface {
+	State() *state.StateDB
+
+	Origin() []byte
+	BlockNumber() *big.Int
+	PrevHash() []byte
+	Coinbase() []byte
+	Time() int64
+	Difficulty() *big.Int
+	BlockHash() []byte
+	GasLimit() *big.Int
+	Transfer(from, to Account, amount *big.Int) error
+	AddLog(state.Log)
+
+	Depth() int
+	SetDepth(i int)
+
+	Call(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error)
+	CallCode(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error)
+	Create(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, ClosureRef)
+}
+
+type Object interface {
+	GetStorage(key *big.Int) *ethutil.Value
+	SetStorage(key *big.Int, value *ethutil.Value)
+}
+
+type Account interface {
+	SubBalance(amount *big.Int)
+	AddBalance(amount *big.Int)
+	Balance() *big.Int
+}
+
+// generic transfer method
+func Transfer(from, to Account, amount *big.Int) error {
+	if from.Balance().Cmp(amount) < 0 {
+		return errors.New("Insufficient balance in account")
+	}
+
+	from.SubBalance(amount)
+	to.AddBalance(amount)
+
+	return nil
+}
+
+type Log struct {
+	address []byte
+	topics  [][]byte
+	data    []byte
+}
+
+func (self *Log) Address() []byte {
+	return self.address
+}
+
+func (self *Log) Topics() [][]byte {
+	return self.topics
+}
+
+func (self *Log) Data() []byte {
+	return self.data
+}
+
+func (self *Log) RlpData() interface{} {
+	return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data}
+}
+
+func (self *Log) String() string {
+	return fmt.Sprintf("[A=%x T=%x D=%x]", self.address, self.topics, self.data)
+}
diff --git a/vm/errors.go b/vm/errors.go
new file mode 100644
index 0000000000000000000000000000000000000000..ab011bd624fb2082885158195cbd784a97a0dd11
--- /dev/null
+++ b/vm/errors.go
@@ -0,0 +1,51 @@
+package vm
+
+import (
+	"fmt"
+	"math/big"
+)
+
+type OutOfGasError struct {
+	req, has *big.Int
+}
+
+func OOG(req, has *big.Int) OutOfGasError {
+	return OutOfGasError{req, has}
+}
+
+func (self OutOfGasError) Error() string {
+	return fmt.Sprintf("out of gas! require %v, have %v", self.req, self.has)
+}
+
+func IsOOGErr(err error) bool {
+	_, ok := err.(OutOfGasError)
+	return ok
+}
+
+type StackError struct {
+	req, has int
+}
+
+func StackErr(req, has int) StackError {
+	return StackError{req, has}
+}
+
+func (self StackError) Error() string {
+	return fmt.Sprintf("stack error! require %v, have %v", self.req, self.has)
+}
+
+func IsStack(err error) bool {
+	_, ok := err.(StackError)
+	return ok
+}
+
+type DepthError struct{}
+
+func (self DepthError) Error() string {
+	return fmt.Sprintf("Max call depth exceeded (%d)", MaxCallDepth)
+}
+
+func IsDepthErr(err error) bool {
+	_, ok := err.(DepthError)
+	return ok
+}
diff --git a/vm/main_test.go b/vm/main_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..0ae03bf6aa4d4995afdb7026723ec977d68e2b43
--- /dev/null
+++ b/vm/main_test.go
@@ -0,0 +1,9 @@
+package vm
+
+import (
+	"testing"
+
+	checker "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { checker.TestingT(t) }
diff --git a/vm/stack.go b/vm/stack.go
new file mode 100644
index 0000000000000000000000000000000000000000..6091479cb78e6bc84fcccc7c34b917afdbf5961d
--- /dev/null
+++ b/vm/stack.go
@@ -0,0 +1,179 @@
+package vm
+
+import (
+	"fmt"
+	"math"
+	"math/big"
+)
+
+type OpType int
+
+const (
+	tNorm = iota
+	tData
+	tExtro
+	tCrypto
+)
+
+type TxCallback func(opType OpType) bool
+
+// Simple push/pop stack mechanism
+type Stack struct {
+	data []*big.Int
+}
+
+func NewStack() *Stack {
+	return &Stack{}
+}
+
+func (st *Stack) Data() []*big.Int {
+	return st.data
+}
+
+func (st *Stack) Len() int {
+	return len(st.data)
+}
+
+func (st *Stack) Pop() *big.Int {
+	str := st.data[len(st.data)-1]
+
+	copy(st.data[:len(st.data)-1], st.data[:len(st.data)-1])
+	st.data = st.data[:len(st.data)-1]
+
+	return str
+}
+
+func (st *Stack) Popn() (*big.Int, *big.Int) {
+	ints := st.data[len(st.data)-2:]
+
+	copy(st.data[:len(st.data)-2], st.data[:len(st.data)-2])
+	st.data = st.data[:len(st.data)-2]
+
+	return ints[0], ints[1]
+}
+
+func (st *Stack) Peek() *big.Int {
+	str := st.data[len(st.data)-1]
+
+	return str
+}
+
+func (st *Stack) Peekn() (*big.Int, *big.Int) {
+	ints := st.data[len(st.data)-2:]
+
+	return ints[0], ints[1]
+}
+
+func (st *Stack) Swapn(n int) (*big.Int, *big.Int) {
+	st.data[len(st.data)-n], st.data[len(st.data)-1] = st.data[len(st.data)-1], st.data[len(st.data)-n]
+
+	return st.data[len(st.data)-n], st.data[len(st.data)-1]
+}
+
+func (st *Stack) Dupn(n int) *big.Int {
+	st.Push(st.data[len(st.data)-n])
+
+	return st.Peek()
+}
+
+func (st *Stack) Push(d *big.Int) {
+	st.data = append(st.data, new(big.Int).Set(d))
+}
+
+func (st *Stack) Get(amount *big.Int) []*big.Int {
+	// offset + size <= len(data)
+	length := big.NewInt(int64(len(st.data)))
+	if amount.Cmp(length) <= 0 {
+		start := new(big.Int).Sub(length, amount)
+		return st.data[start.Int64():length.Int64()]
+	}
+
+	return nil
+}
+
+func (st *Stack) Print() {
+	fmt.Println("### stack ###")
+	if len(st.data) > 0 {
+		for i, val := range st.data {
+			fmt.Printf("%-3d  %v\n", i, val)
+		}
+	} else {
+		fmt.Println("-- empty --")
+	}
+	fmt.Println("#############")
+}
+
+type Memory struct {
+	store []byte
+}
+
+func NewMemory() *Memory {
+	return &Memory{nil}
+}
+
+func (m *Memory) Set(offset, size uint64, value []byte) {
+	if len(value) > 0 {
+		totSize := offset + size
+		lenSize := uint64(len(m.store) - 1)
+		if totSize > lenSize {
+			// Calculate the diff between the sizes
+			diff := totSize - lenSize
+			if diff > 0 {
+				// Create a new empty slice and append it
+				newSlice := make([]byte, diff-1)
+				// Resize slice
+				m.store = append(m.store, newSlice...)
+			}
+		}
+		copy(m.store[offset:offset+size], value)
+	}
+}
+
+func (m *Memory) Resize(size uint64) {
+	if uint64(m.Len()) < size {
+		m.store = append(m.store, make([]byte, size-uint64(m.Len()))...)
+	}
+}
+
+func (m *Memory) Get(offset, size int64) []byte {
+	if len(m.store) > int(offset) {
+		end := int(math.Min(float64(len(m.store)), float64(offset+size)))
+
+		return m.store[offset:end]
+	}
+
+	return nil
+}
+
+func (self *Memory) Geti(offset, size int64) (cpy []byte) {
+	if len(self.store) > int(offset) {
+		cpy = make([]byte, size)
+		copy(cpy, self.store[offset:offset+size])
+
+		return
+	}
+
+	return
+}
+
+func (m *Memory) Len() int {
+	return len(m.store)
+}
+
+func (m *Memory) Data() []byte {
+	return m.store
+}
+
+func (m *Memory) Print() {
+	fmt.Printf("### mem %d bytes ###\n", len(m.store))
+	if len(m.store) > 0 {
+		addr := 0
+		for i := 0; i+32 <= len(m.store); i += 32 {
+			fmt.Printf("%03d: % x\n", addr, m.store[i:i+32])
+			addr++
+		}
+	} else {
+		fmt.Println("-- empty --")
+	}
+	fmt.Println("####################")
+}
diff --git a/vm/types.go b/vm/types.go
new file mode 100644
index 0000000000000000000000000000000000000000..ec9c7e74e6c3161f6df00c493d72481863d1f2dd
--- /dev/null
+++ b/vm/types.go
@@ -0,0 +1,334 @@
+package vm
+
+import (
+	"fmt"
+)
+
+type OpCode byte
+
+// Op codes
+const (
+	// 0x0 range - arithmetic ops
+	STOP OpCode = iota
+	ADD
+	MUL
+	SUB
+	DIV
+	SDIV
+	MOD
+	SMOD
+	ADDMOD
+	MULMOD
+	EXP
+	SIGNEXTEND
+)
+
+const (
+	LT OpCode = iota + 0x10
+	GT
+	SLT
+	SGT
+	EQ
+	ISZERO
+	AND
+	OR
+	XOR
+	NOT
+	BYTE
+
+	SHA3 = 0x20
+)
+
+const (
+	// 0x30 range - closure state
+	ADDRESS OpCode = 0x30 + iota
+	BALANCE
+	ORIGIN
+	CALLER
+	CALLVALUE
+	CALLDATALOAD
+	CALLDATASIZE
+	CALLDATACOPY
+	CODESIZE
+	CODECOPY
+	GASPRICE
+	EXTCODESIZE
+	EXTCODECOPY
+)
+
+const (
+
+	// 0x40 range - block operations
+	PREVHASH OpCode = 0x40 + iota
+	COINBASE
+	TIMESTAMP
+	NUMBER
+	DIFFICULTY
+	GASLIMIT
+)
+
+const (
+	// 0x50 range - 'storage' and execution
+	POP OpCode = 0x50 + iota
+	MLOAD
+	MSTORE
+	MSTORE8
+	SLOAD
+	SSTORE
+	JUMP
+	JUMPI
+	PC
+	MSIZE
+	GAS
+	JUMPDEST
+)
+
+const (
+	// 0x60 range
+	PUSH1 OpCode = 0x60 + iota
+	PUSH2
+	PUSH3
+	PUSH4
+	PUSH5
+	PUSH6
+	PUSH7
+	PUSH8
+	PUSH9
+	PUSH10
+	PUSH11
+	PUSH12
+	PUSH13
+	PUSH14
+	PUSH15
+	PUSH16
+	PUSH17
+	PUSH18
+	PUSH19
+	PUSH20
+	PUSH21
+	PUSH22
+	PUSH23
+	PUSH24
+	PUSH25
+	PUSH26
+	PUSH27
+	PUSH28
+	PUSH29
+	PUSH30
+	PUSH31
+	PUSH32
+	DUP1
+	DUP2
+	DUP3
+	DUP4
+	DUP5
+	DUP6
+	DUP7
+	DUP8
+	DUP9
+	DUP10
+	DUP11
+	DUP12
+	DUP13
+	DUP14
+	DUP15
+	DUP16
+	SWAP1
+	SWAP2
+	SWAP3
+	SWAP4
+	SWAP5
+	SWAP6
+	SWAP7
+	SWAP8
+	SWAP9
+	SWAP10
+	SWAP11
+	SWAP12
+	SWAP13
+	SWAP14
+	SWAP15
+	SWAP16
+)
+
+const (
+	LOG0 OpCode = 0xa0 + iota
+	LOG1
+	LOG2
+	LOG3
+	LOG4
+)
+
+const (
+	// 0xf0 range - closures
+	CREATE OpCode = 0xf0 + iota
+	CALL
+	CALLCODE
+	RETURN
+
+	// 0x70 range - other
+	SUICIDE = 0xff
+)
+
+// Since the opcodes aren't all in order we can't use a regular slice
+var opCodeToString = map[OpCode]string{
+	// 0x0 range - arithmetic ops
+	STOP:       "STOP",
+	ADD:        "ADD",
+	MUL:        "MUL",
+	SUB:        "SUB",
+	DIV:        "DIV",
+	SDIV:       "SDIV",
+	MOD:        "MOD",
+	SMOD:       "SMOD",
+	EXP:        "EXP",
+	NOT:        "NOT",
+	LT:         "LT",
+	GT:         "GT",
+	SLT:        "SLT",
+	SGT:        "SGT",
+	EQ:         "EQ",
+	ISZERO:     "ISZERO",
+	SIGNEXTEND: "SIGNEXTEND",
+
+	// 0x10 range - bit ops
+	AND:    "AND",
+	OR:     "OR",
+	XOR:    "XOR",
+	BYTE:   "BYTE",
+	ADDMOD: "ADDMOD",
+	MULMOD: "MULMOD",
+
+	// 0x20 range - crypto
+	SHA3: "SHA3",
+
+	// 0x30 range - closure state
+	ADDRESS:      "ADDRESS",
+	BALANCE:      "BALANCE",
+	ORIGIN:       "ORIGIN",
+	CALLER:       "CALLER",
+	CALLVALUE:    "CALLVALUE",
+	CALLDATALOAD: "CALLDATALOAD",
+	CALLDATASIZE: "CALLDATASIZE",
+	CALLDATACOPY: "CALLDATACOPY",
+	CODESIZE:     "CODESIZE",
+	CODECOPY:     "CODECOPY",
+	GASPRICE:     "TXGASPRICE",
+
+	// 0x40 range - block operations
+	PREVHASH:    "PREVHASH",
+	COINBASE:    "COINBASE",
+	TIMESTAMP:   "TIMESTAMP",
+	NUMBER:      "NUMBER",
+	DIFFICULTY:  "DIFFICULTY",
+	GASLIMIT:    "GASLIMIT",
+	EXTCODESIZE: "EXTCODESIZE",
+	EXTCODECOPY: "EXTCODECOPY",
+
+	// 0x50 range - 'storage' and execution
+	POP: "POP",
+	//DUP:     "DUP",
+	//SWAP:    "SWAP",
+	MLOAD:    "MLOAD",
+	MSTORE:   "MSTORE",
+	MSTORE8:  "MSTORE8",
+	SLOAD:    "SLOAD",
+	SSTORE:   "SSTORE",
+	JUMP:     "JUMP",
+	JUMPI:    "JUMPI",
+	PC:       "PC",
+	MSIZE:    "MSIZE",
+	GAS:      "GAS",
+	JUMPDEST: "JUMPDEST",
+
+	// 0x60 range - push
+	PUSH1:  "PUSH1",
+	PUSH2:  "PUSH2",
+	PUSH3:  "PUSH3",
+	PUSH4:  "PUSH4",
+	PUSH5:  "PUSH5",
+	PUSH6:  "PUSH6",
+	PUSH7:  "PUSH7",
+	PUSH8:  "PUSH8",
+	PUSH9:  "PUSH9",
+	PUSH10: "PUSH10",
+	PUSH11: "PUSH11",
+	PUSH12: "PUSH12",
+	PUSH13: "PUSH13",
+	PUSH14: "PUSH14",
+	PUSH15: "PUSH15",
+	PUSH16: "PUSH16",
+	PUSH17: "PUSH17",
+	PUSH18: "PUSH18",
+	PUSH19: "PUSH19",
+	PUSH20: "PUSH20",
+	PUSH21: "PUSH21",
+	PUSH22: "PUSH22",
+	PUSH23: "PUSH23",
+	PUSH24: "PUSH24",
+	PUSH25: "PUSH25",
+	PUSH26: "PUSH26",
+	PUSH27: "PUSH27",
+	PUSH28: "PUSH28",
+	PUSH29: "PUSH29",
+	PUSH30: "PUSH30",
+	PUSH31: "PUSH31",
+	PUSH32: "PUSH32",
+
+	DUP1:  "DUP1",
+	DUP2:  "DUP2",
+	DUP3:  "DUP3",
+	DUP4:  "DUP4",
+	DUP5:  "DUP5",
+	DUP6:  "DUP6",
+	DUP7:  "DUP7",
+	DUP8:  "DUP8",
+	DUP9:  "DUP9",
+	DUP10: "DUP10",
+	DUP11: "DUP11",
+	DUP12: "DUP12",
+	DUP13: "DUP13",
+	DUP14: "DUP14",
+	DUP15: "DUP15",
+	DUP16: "DUP16",
+
+	SWAP1:  "SWAP1",
+	SWAP2:  "SWAP2",
+	SWAP3:  "SWAP3",
+	SWAP4:  "SWAP4",
+	SWAP5:  "SWAP5",
+	SWAP6:  "SWAP6",
+	SWAP7:  "SWAP7",
+	SWAP8:  "SWAP8",
+	SWAP9:  "SWAP9",
+	SWAP10: "SWAP10",
+	SWAP11: "SWAP11",
+	SWAP12: "SWAP12",
+	SWAP13: "SWAP13",
+	SWAP14: "SWAP14",
+	SWAP15: "SWAP15",
+	SWAP16: "SWAP16",
+	LOG0:   "LOG0",
+	LOG1:   "LOG1",
+	LOG2:   "LOG2",
+	LOG3:   "LOG3",
+	LOG4:   "LOG4",
+
+	// 0xf0 range
+	CREATE:   "CREATE",
+	CALL:     "CALL",
+	RETURN:   "RETURN",
+	CALLCODE: "CALLCODE",
+
+	// 0x70 range - other
+	SUICIDE: "SUICIDE",
+}
+
+func (o OpCode) String() string {
+	str := opCodeToString[o]
+	if len(str) == 0 {
+		return fmt.Sprintf("Missing opcode 0x%x", int(o))
+	}
+
+	return str
+}
diff --git a/vm/virtual_machine.go b/vm/virtual_machine.go
new file mode 100644
index 0000000000000000000000000000000000000000..3b6f98ab2e36159db7473e52fdc2a474baf76d55
--- /dev/null
+++ b/vm/virtual_machine.go
@@ -0,0 +1,10 @@
+package vm
+
+import "math/big"
+
+type VirtualMachine interface {
+	Env() Environment
+	Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) ([]byte, error)
+	Printf(string, ...interface{}) VirtualMachine
+	Endl() VirtualMachine
+}
diff --git a/vm/vm.go b/vm/vm.go
new file mode 100644
index 0000000000000000000000000000000000000000..22172cb3ae0ab9a28525b89013272b59a0a4625c
--- /dev/null
+++ b/vm/vm.go
@@ -0,0 +1,36 @@
+package vm
+
+import "math/big"
+
+// BIG FAT WARNING. THIS VM IS NOT YET IS USE!
+// I want to get all VM tests pass first before updating this VM
+
+type Vm struct {
+	env   Environment
+	err   error
+	depth int
+}
+
+func New(env Environment, typ Type) VirtualMachine {
+	switch typ {
+	case DebugVmTy:
+		return NewDebugVm(env)
+	default:
+		return &Vm{env: env}
+	}
+}
+
+func (self *Vm) Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) (ret []byte, err error) {
+	panic("not implemented")
+}
+
+func (self *Vm) Env() Environment {
+	return self.env
+}
+
+func (self *Vm) Depth() int {
+	return self.depth
+}
+
+func (self *Vm) Printf(format string, v ...interface{}) VirtualMachine { return self }
+func (self *Vm) Endl() VirtualMachine                                  { return self }
diff --git a/vm/vm_debug.go b/vm/vm_debug.go
new file mode 100644
index 0000000000000000000000000000000000000000..aa3291e66f960ce2dcaf511e1c697746e69e62b0
--- /dev/null
+++ b/vm/vm_debug.go
@@ -0,0 +1,983 @@
+package vm
+
+import (
+	"fmt"
+	"math"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type DebugVm struct {
+	env Environment
+
+	logTy  byte
+	logStr string
+
+	err error
+
+	// Debugging
+	Dbg Debugger
+
+	BreakPoints []int64
+	Stepping    bool
+	Fn          string
+
+	Recoverable bool
+}
+
+func NewDebugVm(env Environment) *DebugVm {
+	lt := LogTyPretty
+	if ethutil.Config.Diff {
+		lt = LogTyDiff
+	}
+
+	return &DebugVm{env: env, logTy: lt, Recoverable: true}
+}
+
+func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, callData []byte) (ret []byte, err error) {
+	self.env.SetDepth(self.env.Depth() + 1)
+
+	msg := self.env.State().Manifest().AddMessage(&state.Message{
+		To: me.Address(), From: caller.Address(),
+		Input:  callData,
+		Origin: self.env.Origin(),
+		Block:  self.env.BlockHash(), Timestamp: self.env.Time(), Coinbase: self.env.Coinbase(), Number: self.env.BlockNumber(),
+		Value: value,
+	})
+	closure := NewClosure(msg, caller, me, code, gas, price)
+
+	if p := Precompiled[string(me.Address())]; p != nil {
+		return self.RunPrecompiled(p, callData, closure)
+	}
+
+	if self.Recoverable {
+		// Recover from any require exception
+		defer func() {
+			if r := recover(); r != nil {
+				self.Endl()
+
+				closure.UseGas(closure.Gas)
+
+				ret = closure.Return(nil)
+
+				err = fmt.Errorf("%v", r)
+
+			}
+		}()
+	}
+
+	var (
+		op OpCode
+
+		destinations        = analyseJumpDests(closure.Code)
+		mem                 = NewMemory()
+		stack               = NewStack()
+		pc           uint64 = 0
+		step                = 0
+		prevStep            = 0
+		statedb             = self.env.State()
+		require             = func(m int) {
+			if stack.Len() < m {
+				panic(fmt.Sprintf("%04v (%v) stack err size = %d, required = %d", pc, op, stack.Len(), m))
+			}
+		}
+
+		jump = func(from uint64, to *big.Int) {
+			p := to.Uint64()
+
+			self.Printf(" ~> %v", to)
+			// Return to start
+			if p == 0 {
+				pc = 0
+			} else {
+				nop := OpCode(closure.GetOp(p))
+				if !(nop == JUMPDEST || destinations[from] != nil) {
+					panic(fmt.Sprintf("invalid jump destination (%v) %v", nop, p))
+				} else if nop == JUMP || nop == JUMPI {
+					panic(fmt.Sprintf("not allowed to JUMP(I) in to JUMP"))
+				}
+
+				pc = to.Uint64()
+
+			}
+
+			self.Endl()
+		}
+	)
+
+	vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], closure.Address(), len(code), closure.Gas, callData)
+
+	// Don't bother with the execution if there's no code.
+	if len(code) == 0 {
+		return closure.Return(nil), nil
+	}
+
+	for {
+		prevStep = step
+		// The base for all big integer arithmetic
+		base := new(big.Int)
+
+		step++
+		// Get the memory location of pc
+		op = closure.GetOp(pc)
+
+		gas := new(big.Int)
+		addStepGasUsage := func(amount *big.Int) {
+			if amount.Cmp(ethutil.Big0) >= 0 {
+				gas.Add(gas, amount)
+			}
+		}
+
+		addStepGasUsage(GasStep)
+
+		var newMemSize *big.Int = ethutil.Big0
+		var additionalGas *big.Int = new(big.Int)
+		// Stack Check, memory resize & gas phase
+		switch op {
+		// Stack checks only
+		case ISZERO, CALLDATALOAD, POP, JUMP, NOT: // 1
+			require(1)
+		case ADD, SUB, DIV, SDIV, MOD, SMOD, LT, GT, SLT, SGT, EQ, AND, OR, XOR, BYTE: // 2
+			require(2)
+		case ADDMOD, MULMOD: // 3
+			require(3)
+		case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16:
+			n := int(op - SWAP1 + 2)
+			require(n)
+		case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16:
+			n := int(op - DUP1 + 1)
+			require(n)
+		case LOG0, LOG1, LOG2, LOG3, LOG4:
+			n := int(op - LOG0)
+			require(n + 2)
+
+			gas.Set(GasLog)
+			addStepGasUsage(new(big.Int).Mul(big.NewInt(int64(n)), GasLog))
+
+			mSize, mStart := stack.Peekn()
+			addStepGasUsage(mSize)
+
+			newMemSize = calcMemSize(mStart, mSize)
+		case EXP:
+			require(2)
+
+			gas.Set(big.NewInt(int64(len(stack.data[stack.Len()-2].Bytes()) + 1)))
+		// Gas only
+		case STOP:
+			gas.Set(ethutil.Big0)
+		case SUICIDE:
+			require(1)
+
+			gas.Set(ethutil.Big0)
+		case SLOAD:
+			require(1)
+
+			gas.Set(GasSLoad)
+		// Memory resize & Gas
+		case SSTORE:
+			require(2)
+
+			var mult *big.Int
+			y, x := stack.Peekn()
+			val := statedb.GetState(closure.Address(), x.Bytes())
+			if len(val) == 0 && len(y.Bytes()) > 0 {
+				// 0 => non 0
+				mult = ethutil.Big3
+			} else if len(val) > 0 && len(y.Bytes()) == 0 {
+				statedb.Refund(caller.Address(), GasSStoreRefund)
+
+				mult = ethutil.Big0
+			} else {
+				// non 0 => non 0 (or 0 => 0)
+				mult = ethutil.Big1
+			}
+			gas.Set(new(big.Int).Mul(mult, GasSStore))
+		case BALANCE:
+			require(1)
+			gas.Set(GasBalance)
+		case MSTORE:
+			require(2)
+			newMemSize = calcMemSize(stack.Peek(), u256(32))
+		case MLOAD:
+			require(1)
+
+			newMemSize = calcMemSize(stack.Peek(), u256(32))
+		case MSTORE8:
+			require(2)
+			newMemSize = calcMemSize(stack.Peek(), u256(1))
+		case RETURN:
+			require(2)
+
+			newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-2])
+		case SHA3:
+			require(2)
+			gas.Set(GasSha)
+			newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-2])
+			additionalGas.Set(stack.data[stack.Len()-2])
+		case CALLDATACOPY:
+			require(2)
+
+			newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3])
+			additionalGas.Set(stack.data[stack.Len()-3])
+		case CODECOPY:
+			require(3)
+
+			newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3])
+			additionalGas.Set(stack.data[stack.Len()-3])
+		case EXTCODECOPY:
+			require(4)
+
+			newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-4])
+			additionalGas.Set(stack.data[stack.Len()-4])
+		case CALL, CALLCODE:
+			require(7)
+			gas.Set(GasCall)
+			addStepGasUsage(stack.data[stack.Len()-1])
+
+			x := calcMemSize(stack.data[stack.Len()-6], stack.data[stack.Len()-7])
+			y := calcMemSize(stack.data[stack.Len()-4], stack.data[stack.Len()-5])
+
+			newMemSize = ethutil.BigMax(x, y)
+		case CREATE:
+			require(3)
+			gas.Set(GasCreate)
+
+			newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-3])
+		}
+
+		switch op {
+		case CALLDATACOPY, CODECOPY, EXTCODECOPY:
+			additionalGas.Add(additionalGas, u256(31))
+			additionalGas.Div(additionalGas, u256(32))
+			addStepGasUsage(additionalGas)
+		case SHA3:
+			additionalGas.Add(additionalGas, u256(31))
+			additionalGas.Div(additionalGas, u256(32))
+			additionalGas.Mul(additionalGas, GasSha3Byte)
+			addStepGasUsage(additionalGas)
+		}
+
+		if newMemSize.Cmp(ethutil.Big0) > 0 {
+			newMemSize.Add(newMemSize, u256(31))
+			newMemSize.Div(newMemSize, u256(32))
+			newMemSize.Mul(newMemSize, u256(32))
+
+			if newMemSize.Cmp(u256(int64(mem.Len()))) > 0 {
+				memGasUsage := new(big.Int).Sub(newMemSize, u256(int64(mem.Len())))
+				memGasUsage.Mul(GasMemory, memGasUsage)
+				memGasUsage.Div(memGasUsage, u256(32))
+
+				addStepGasUsage(memGasUsage)
+
+			}
+
+		}
+
+		self.Printf("(pc) %-3d -o- %-14s", pc, op.String())
+		self.Printf(" (m) %-4d (s) %-4d (g) %-3v (%v)", mem.Len(), stack.Len(), gas, closure.Gas)
+
+		if !closure.UseGas(gas) {
+			self.Endl()
+
+			tmp := new(big.Int).Set(closure.Gas)
+
+			closure.UseGas(closure.Gas)
+
+			return closure.Return(nil), OOG(gas, tmp)
+		}
+
+		mem.Resize(newMemSize.Uint64())
+
+		switch op {
+		// 0x20 range
+		case ADD:
+			x, y := stack.Popn()
+			self.Printf(" %v + %v", y, x)
+
+			base.Add(y, x)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+			// Pop result back on the stack
+			stack.Push(base)
+		case SUB:
+			x, y := stack.Popn()
+			self.Printf(" %v - %v", y, x)
+
+			base.Sub(y, x)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+			// Pop result back on the stack
+			stack.Push(base)
+		case MUL:
+			x, y := stack.Popn()
+			self.Printf(" %v * %v", y, x)
+
+			base.Mul(y, x)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+			// Pop result back on the stack
+			stack.Push(base)
+		case DIV:
+			x, y := stack.Pop(), stack.Pop()
+			self.Printf(" %v / %v", x, y)
+
+			if y.Cmp(ethutil.Big0) != 0 {
+				base.Div(x, y)
+			}
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+			// Pop result back on the stack
+			stack.Push(base)
+		case SDIV:
+			x, y := S256(stack.Pop()), S256(stack.Pop())
+
+			self.Printf(" %v / %v", x, y)
+
+			if y.Cmp(ethutil.Big0) == 0 {
+				base.Set(ethutil.Big0)
+			} else {
+				n := new(big.Int)
+				if new(big.Int).Mul(x, y).Cmp(ethutil.Big0) < 0 {
+					n.SetInt64(-1)
+				} else {
+					n.SetInt64(1)
+				}
+
+				base.Div(x.Abs(x), y.Abs(y)).Mul(base, n)
+
+				U256(base)
+			}
+
+			self.Printf(" = %v", base)
+			stack.Push(base)
+		case MOD:
+			x, y := stack.Pop(), stack.Pop()
+
+			self.Printf(" %v %% %v", x, y)
+
+			if y.Cmp(ethutil.Big0) == 0 {
+				base.Set(ethutil.Big0)
+			} else {
+				base.Mod(x, y)
+			}
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+			stack.Push(base)
+		case SMOD:
+			x, y := S256(stack.Pop()), S256(stack.Pop())
+
+			self.Printf(" %v %% %v", x, y)
+
+			if y.Cmp(ethutil.Big0) == 0 {
+				base.Set(ethutil.Big0)
+			} else {
+				n := new(big.Int)
+				if x.Cmp(ethutil.Big0) < 0 {
+					n.SetInt64(-1)
+				} else {
+					n.SetInt64(1)
+				}
+
+				base.Mod(x.Abs(x), y.Abs(y)).Mul(base, n)
+
+				U256(base)
+			}
+
+			self.Printf(" = %v", base)
+			stack.Push(base)
+
+		case EXP:
+			x, y := stack.Popn()
+
+			self.Printf(" %v ** %v", y, x)
+
+			base.Exp(y, x, Pow256)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+
+			stack.Push(base)
+		case SIGNEXTEND:
+			back := stack.Pop().Uint64()
+			if back < 31 {
+				bit := uint(back*8 + 7)
+				num := stack.Pop()
+				mask := new(big.Int).Lsh(ethutil.Big1, bit)
+				mask.Sub(mask, ethutil.Big1)
+				if ethutil.BitTest(num, int(bit)) {
+					num.Or(num, mask.Not(mask))
+				} else {
+					num.And(num, mask)
+				}
+
+				num = U256(num)
+
+				self.Printf(" = %v", num)
+
+				stack.Push(num)
+			}
+		case NOT:
+			base.Sub(Pow256, stack.Pop()).Sub(base, ethutil.Big1)
+
+			// Not needed
+			//base = U256(base)
+
+			stack.Push(base)
+		case LT:
+			x, y := stack.Popn()
+			self.Printf(" %v < %v", y, x)
+			// x < y
+			if y.Cmp(x) < 0 {
+				stack.Push(ethutil.BigTrue)
+			} else {
+				stack.Push(ethutil.BigFalse)
+			}
+		case GT:
+			x, y := stack.Popn()
+			self.Printf(" %v > %v", y, x)
+
+			// x > y
+			if y.Cmp(x) > 0 {
+				stack.Push(ethutil.BigTrue)
+			} else {
+				stack.Push(ethutil.BigFalse)
+			}
+
+		case SLT:
+			y, x := S256(stack.Pop()), S256(stack.Pop())
+			self.Printf(" %v < %v", y, x)
+			// x < y
+			if y.Cmp(S256(x)) < 0 {
+				stack.Push(ethutil.BigTrue)
+			} else {
+				stack.Push(ethutil.BigFalse)
+			}
+		case SGT:
+			y, x := S256(stack.Pop()), S256(stack.Pop())
+			self.Printf(" %v > %v", y, x)
+
+			// x > y
+			if y.Cmp(x) > 0 {
+				stack.Push(ethutil.BigTrue)
+			} else {
+				stack.Push(ethutil.BigFalse)
+			}
+
+		case EQ:
+			x, y := stack.Popn()
+			self.Printf(" %v == %v", y, x)
+
+			// x == y
+			if x.Cmp(y) == 0 {
+				stack.Push(ethutil.BigTrue)
+			} else {
+				stack.Push(ethutil.BigFalse)
+			}
+		case ISZERO:
+			x := stack.Pop()
+			if x.Cmp(ethutil.BigFalse) > 0 {
+				stack.Push(ethutil.BigFalse)
+			} else {
+				stack.Push(ethutil.BigTrue)
+			}
+
+			// 0x10 range
+		case AND:
+			x, y := stack.Popn()
+			self.Printf(" %v & %v", y, x)
+
+			stack.Push(base.And(y, x))
+		case OR:
+			x, y := stack.Popn()
+			self.Printf(" %v | %v", y, x)
+
+			stack.Push(base.Or(y, x))
+		case XOR:
+			x, y := stack.Popn()
+			self.Printf(" %v ^ %v", y, x)
+
+			stack.Push(base.Xor(y, x))
+		case BYTE:
+			val, th := stack.Popn()
+
+			if th.Cmp(big.NewInt(32)) < 0 {
+				byt := big.NewInt(int64(ethutil.LeftPadBytes(val.Bytes(), 32)[th.Int64()]))
+
+				base.Set(byt)
+			} else {
+				base.Set(ethutil.BigFalse)
+			}
+
+			self.Printf(" => 0x%x", base.Bytes())
+
+			stack.Push(base)
+		case ADDMOD:
+
+			x := stack.Pop()
+			y := stack.Pop()
+			z := stack.Pop()
+
+			base.Add(x, y)
+			base.Mod(base, z)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+
+			stack.Push(base)
+		case MULMOD:
+
+			x := stack.Pop()
+			y := stack.Pop()
+			z := stack.Pop()
+
+			base.Mul(x, y)
+			base.Mod(base, z)
+
+			U256(base)
+
+			self.Printf(" = %v", base)
+
+			stack.Push(base)
+
+			// 0x20 range
+		case SHA3:
+			size, offset := stack.Popn()
+			data := crypto.Sha3(mem.Get(offset.Int64(), size.Int64()))
+
+			stack.Push(ethutil.BigD(data))
+
+			self.Printf(" => %x", data)
+			// 0x30 range
+		case ADDRESS:
+			stack.Push(ethutil.BigD(closure.Address()))
+
+			self.Printf(" => %x", closure.Address())
+		case BALANCE:
+
+			addr := stack.Pop().Bytes()
+			balance := statedb.GetBalance(addr)
+
+			stack.Push(balance)
+
+			self.Printf(" => %v (%x)", balance, addr)
+		case ORIGIN:
+			origin := self.env.Origin()
+
+			stack.Push(ethutil.BigD(origin))
+
+			self.Printf(" => %x", origin)
+		case CALLER:
+			caller := closure.caller.Address()
+			stack.Push(ethutil.BigD(caller))
+
+			self.Printf(" => %x", caller)
+		case CALLVALUE:
+			stack.Push(value)
+
+			self.Printf(" => %v", value)
+		case CALLDATALOAD:
+			var (
+				offset  = stack.Pop()
+				data    = make([]byte, 32)
+				lenData = big.NewInt(int64(len(callData)))
+			)
+
+			if lenData.Cmp(offset) >= 0 {
+				length := new(big.Int).Add(offset, ethutil.Big32)
+				length = ethutil.BigMin(length, lenData)
+
+				copy(data, callData[offset.Int64():length.Int64()])
+			}
+
+			self.Printf(" => 0x%x", data)
+
+			stack.Push(ethutil.BigD(data))
+		case CALLDATASIZE:
+			l := int64(len(callData))
+			stack.Push(big.NewInt(l))
+
+			self.Printf(" => %d", l)
+		case CALLDATACOPY:
+			var (
+				size = uint64(len(callData))
+				mOff = stack.Pop().Uint64()
+				cOff = stack.Pop().Uint64()
+				l    = stack.Pop().Uint64()
+			)
+
+			if cOff > size {
+				cOff = 0
+				l = 0
+			} else if cOff+l > size {
+				l = 0
+			}
+
+			code := callData[cOff : cOff+l]
+
+			mem.Set(mOff, l, code)
+
+			self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, callData[cOff:cOff+l])
+		case CODESIZE, EXTCODESIZE:
+			var code []byte
+			if op == EXTCODESIZE {
+				addr := stack.Pop().Bytes()
+
+				code = statedb.GetCode(addr)
+			} else {
+				code = closure.Code
+			}
+
+			l := big.NewInt(int64(len(code)))
+			stack.Push(l)
+
+			self.Printf(" => %d", l)
+		case CODECOPY, EXTCODECOPY:
+			var code []byte
+			if op == EXTCODECOPY {
+				code = statedb.GetCode(stack.Pop().Bytes())
+			} else {
+				code = closure.Code
+			}
+
+			var (
+				size = uint64(len(code))
+				mOff = stack.Pop().Uint64()
+				cOff = stack.Pop().Uint64()
+				l    = stack.Pop().Uint64()
+			)
+
+			if cOff > size {
+				cOff = 0
+				l = 0
+			} else if cOff+l > size {
+				l = uint64(math.Min(float64(cOff+l), float64(size)))
+			}
+			codeCopy := code[cOff : cOff+l]
+
+			mem.Set(mOff, l, codeCopy)
+
+			self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, codeCopy)
+		case GASPRICE:
+			stack.Push(closure.Price)
+
+			self.Printf(" => %v", closure.Price)
+
+			// 0x40 range
+		case PREVHASH:
+			prevHash := self.env.PrevHash()
+
+			stack.Push(ethutil.BigD(prevHash))
+
+			self.Printf(" => 0x%x", prevHash)
+		case COINBASE:
+			coinbase := self.env.Coinbase()
+
+			stack.Push(ethutil.BigD(coinbase))
+
+			self.Printf(" => 0x%x", coinbase)
+		case TIMESTAMP:
+			time := self.env.Time()
+
+			stack.Push(big.NewInt(time))
+
+			self.Printf(" => 0x%x", time)
+		case NUMBER:
+			number := self.env.BlockNumber()
+
+			stack.Push(number)
+
+			self.Printf(" => 0x%x", number.Bytes())
+		case DIFFICULTY:
+			difficulty := self.env.Difficulty()
+
+			stack.Push(difficulty)
+
+			self.Printf(" => 0x%x", difficulty.Bytes())
+		case GASLIMIT:
+			stack.Push(self.env.GasLimit())
+
+			// 0x50 range
+		case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
+			//a := big.NewInt(int64(op) - int64(PUSH1) + 1)
+			a := uint64(op - PUSH1 + 1)
+			//pc.Add(pc, ethutil.Big1)
+			val := ethutil.BigD(closure.GetRangeValue(pc+1, a))
+			// Push value to stack
+			stack.Push(val)
+			pc += a
+			//pc.Add(pc, a.Sub(a, big.NewInt(1)))
+
+			step += int(op) - int(PUSH1) + 1
+
+			self.Printf(" => 0x%x", val.Bytes())
+		case POP:
+			stack.Pop()
+		case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16:
+			n := int(op - DUP1 + 1)
+			stack.Dupn(n)
+
+			self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes())
+		case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16:
+			n := int(op - SWAP1 + 2)
+			x, y := stack.Swapn(n)
+
+			self.Printf(" => [%d] %x [0] %x", n, x.Bytes(), y.Bytes())
+		case LOG0, LOG1, LOG2, LOG3, LOG4:
+			n := int(op - LOG0)
+			topics := make([][]byte, n)
+			mSize, mStart := stack.Popn()
+			for i := 0; i < n; i++ {
+				topics[i] = ethutil.LeftPadBytes(stack.Pop().Bytes(), 32)
+			}
+
+			data := mem.Geti(mStart.Int64(), mSize.Int64())
+			log := &Log{closure.Address(), topics, data}
+			self.env.AddLog(log)
+
+			self.Printf(" => %v", log)
+		case MLOAD:
+			offset := stack.Pop()
+			val := ethutil.BigD(mem.Get(offset.Int64(), 32))
+			stack.Push(val)
+
+			self.Printf(" => 0x%x", val.Bytes())
+		case MSTORE: // Store the value at stack top-1 in to memory at location stack top
+			// Pop value of the stack
+			val, mStart := stack.Popn()
+			mem.Set(mStart.Uint64(), 32, ethutil.BigToBytes(val, 256))
+
+			self.Printf(" => 0x%x", val)
+		case MSTORE8:
+			off := stack.Pop()
+			val := stack.Pop()
+
+			mem.store[off.Int64()] = byte(val.Int64() & 0xff)
+
+			self.Printf(" => [%v] 0x%x", off, val)
+		case SLOAD:
+			loc := stack.Pop()
+			val := ethutil.BigD(statedb.GetState(closure.Address(), loc.Bytes()))
+			stack.Push(val)
+
+			self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
+		case SSTORE:
+			val, loc := stack.Popn()
+			statedb.SetState(closure.Address(), loc.Bytes(), val)
+
+			closure.message.AddStorageChange(loc.Bytes())
+
+			self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
+		case JUMP:
+			jump(pc, stack.Pop())
+
+			continue
+		case JUMPI:
+			cond, pos := stack.Popn()
+
+			if cond.Cmp(ethutil.BigTrue) >= 0 {
+				jump(pc, pos)
+
+				continue
+			}
+
+		case JUMPDEST:
+		case PC:
+			stack.Push(big.NewInt(int64(pc)))
+		case MSIZE:
+			stack.Push(big.NewInt(int64(mem.Len())))
+		case GAS:
+			stack.Push(closure.Gas)
+			// 0x60 range
+		case CREATE:
+
+			var (
+				err          error
+				value        = stack.Pop()
+				size, offset = stack.Popn()
+				input        = mem.Get(offset.Int64(), size.Int64())
+				gas          = new(big.Int).Set(closure.Gas)
+
+				// Snapshot the current stack so we are able to
+				// revert back to it later.
+				//snapshot = self.env.State().Copy()
+			)
+
+			// Generate a new address
+			n := statedb.GetNonce(closure.Address())
+			addr := crypto.CreateAddress(closure.Address(), n)
+			statedb.SetNonce(closure.Address(), n+1)
+
+			self.Printf(" (*) %x", addr).Endl()
+
+			closure.UseGas(closure.Gas)
+
+			ret, err, ref := self.env.Create(closure, addr, input, gas, price, value)
+			if err != nil {
+				stack.Push(ethutil.BigFalse)
+
+				self.Printf("CREATE err %v", err)
+			} else {
+				// gas < len(ret) * CreateDataGas == NO_CODE
+				dataGas := big.NewInt(int64(len(ret)))
+				dataGas.Mul(dataGas, GasCreateByte)
+				if closure.UseGas(dataGas) {
+					ref.SetCode(ret)
+					msg.Output = ret
+				}
+
+				stack.Push(ethutil.BigD(addr))
+			}
+
+			self.Endl()
+
+			// Debug hook
+			if self.Dbg != nil {
+				self.Dbg.SetCode(closure.Code)
+			}
+		case CALL, CALLCODE:
+			self.Endl()
+
+			gas := stack.Pop()
+			// Pop gas and value of the stack.
+			value, addr := stack.Popn()
+			// Pop input size and offset
+			inSize, inOffset := stack.Popn()
+			// Pop return size and offset
+			retSize, retOffset := stack.Popn()
+
+			// Get the arguments from the memory
+			args := mem.Get(inOffset.Int64(), inSize.Int64())
+
+			var (
+				ret []byte
+				err error
+			)
+			if op == CALLCODE {
+				ret, err = self.env.CallCode(closure, addr.Bytes(), args, gas, price, value)
+			} else {
+				ret, err = self.env.Call(closure, addr.Bytes(), args, gas, price, value)
+			}
+
+			if err != nil {
+				stack.Push(ethutil.BigFalse)
+
+				vmlogger.Debugln(err)
+			} else {
+				stack.Push(ethutil.BigTrue)
+				msg.Output = ret
+
+				mem.Set(retOffset.Uint64(), retSize.Uint64(), ret)
+			}
+			self.Printf("resume %x (%v)", closure.Address(), closure.Gas)
+
+			// Debug hook
+			if self.Dbg != nil {
+				self.Dbg.SetCode(closure.Code)
+			}
+
+		case RETURN:
+			size, offset := stack.Popn()
+			ret := mem.Get(offset.Int64(), size.Int64())
+
+			self.Printf(" => [%v, %v] (%d) 0x%x", offset, size, len(ret), ret).Endl()
+
+			return closure.Return(ret), nil
+		case SUICIDE:
+			receiver := statedb.GetOrNewStateObject(stack.Pop().Bytes())
+			balance := statedb.GetBalance(closure.Address())
+
+			self.Printf(" => (%x) %v", receiver.Address()[:4], balance)
+
+			receiver.AddAmount(balance)
+			statedb.Delete(closure.Address())
+
+			fallthrough
+		case STOP: // Stop the closure
+			self.Endl()
+
+			return closure.Return(nil), nil
+		default:
+			vmlogger.Debugf("(pc) %-3v Invalid opcode %x\n", pc, op)
+
+			closure.ReturnGas(big.NewInt(1), nil)
+
+			return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op)
+		}
+
+		pc++
+
+		self.Endl()
+
+		if self.Dbg != nil {
+			for _, instrNo := range self.Dbg.BreakPoints() {
+				if pc == uint64(instrNo) {
+					self.Stepping = true
+
+					if !self.Dbg.BreakHook(prevStep, op, mem, stack, statedb.GetStateObject(closure.Address())) {
+						return nil, nil
+					}
+				} else if self.Stepping {
+					if !self.Dbg.StepHook(prevStep, op, mem, stack, statedb.GetStateObject(closure.Address())) {
+						return nil, nil
+					}
+				}
+			}
+		}
+
+	}
+}
+
+func (self *DebugVm) RunPrecompiled(p *PrecompiledAccount, callData []byte, closure *Closure) (ret []byte, err error) {
+	gas := p.Gas(len(callData))
+	if closure.UseGas(gas) {
+		ret = p.Call(callData)
+		self.Printf("NATIVE_FUNC => %x", ret)
+		self.Endl()
+
+		return closure.Return(ret), nil
+	} else {
+		self.Endl()
+
+		tmp := new(big.Int).Set(closure.Gas)
+
+		closure.UseGas(closure.Gas)
+
+		return closure.Return(nil), OOG(gas, tmp)
+	}
+}
+
+func (self *DebugVm) Printf(format string, v ...interface{}) VirtualMachine {
+	if self.logTy == LogTyPretty {
+		self.logStr += fmt.Sprintf(format, v...)
+	}
+
+	return self
+}
+
+func (self *DebugVm) Endl() VirtualMachine {
+	if self.logTy == LogTyPretty {
+		vmlogger.Debugln(self.logStr)
+		self.logStr = ""
+	}
+
+	return self
+}
+
+func (self *DebugVm) Env() Environment {
+	return self.env
+}
diff --git a/vm/vm_test.go b/vm/vm_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..9bd147a7263a0389088d56389e69f3673a098c71
--- /dev/null
+++ b/vm/vm_test.go
@@ -0,0 +1,3 @@
+package vm
+
+// Tests have been removed in favour of general tests. If anything implementation specific needs testing, put it here
diff --git a/websocket/client.go b/websocket/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..d961816e8dc4f385827d5a33d4ae67073152944d
--- /dev/null
+++ b/websocket/client.go
@@ -0,0 +1,122 @@
+package websocket
+
+import (
+	"fmt"
+	"io"
+
+	ws "code.google.com/p/go.net/websocket"
+)
+
+const channelBufSize = 100
+
+var maxId int = 0
+
+type MsgFunc func(c *Client, msg *Message)
+
+// Chat client.
+type Client struct {
+	id     int
+	ws     *ws.Conn
+	server *Server
+	ch     chan *Message
+	doneCh chan bool
+
+	onMessage MsgFunc
+}
+
+// Create new chat client.
+func NewClient(ws *ws.Conn, server *Server) *Client {
+
+	if ws == nil {
+		panic("ws cannot be nil")
+	}
+
+	if server == nil {
+		panic("server cannot be nil")
+	}
+
+	maxId++
+	ch := make(chan *Message, channelBufSize)
+	doneCh := make(chan bool)
+
+	return &Client{maxId, ws, server, ch, doneCh, nil}
+}
+
+func (c *Client) Id() int {
+	return c.id
+}
+
+func (c *Client) Conn() *ws.Conn {
+	return c.ws
+}
+
+func (c *Client) Write(data interface{}, seed int) {
+	msg := &Message{Seed: seed, Data: data}
+	select {
+	case c.ch <- msg:
+	default:
+		c.server.Del(c)
+		err := fmt.Errorf("client %d is disconnected.", c.id)
+		c.server.Err(err)
+	}
+}
+
+func (c *Client) Done() {
+	c.doneCh <- true
+}
+
+// Listen Write and Read request via chanel
+func (c *Client) Listen() {
+	go c.listenWrite()
+	c.listenRead()
+}
+
+// Listen write request via chanel
+func (c *Client) listenWrite() {
+	wslogger.Debugln("Listening write to client")
+	for {
+		select {
+
+		// send message to the client
+		case msg := <-c.ch:
+			wslogger.Debugln("Send:", msg)
+			ws.JSON.Send(c.ws, msg)
+
+		// receive done request
+		case <-c.doneCh:
+			c.server.Del(c)
+			c.doneCh <- true // for listenRead method
+			return
+		}
+	}
+}
+
+// Listen read request via chanel
+func (c *Client) listenRead() {
+	wslogger.Debugln("Listening read from client")
+	for {
+		select {
+
+		// receive done request
+		case <-c.doneCh:
+			c.server.Del(c)
+			c.doneCh <- true // for listenWrite method
+			return
+
+		// read data from ws connection
+		default:
+			var msg Message
+			err := ws.JSON.Receive(c.ws, &msg)
+			if err == io.EOF {
+				c.doneCh <- true
+			} else if err != nil {
+				c.server.Err(err)
+			} else {
+				wslogger.Debugln(&msg)
+				if c.onMessage != nil {
+					c.onMessage(c, &msg)
+				}
+			}
+		}
+	}
+}
diff --git a/websocket/message.go b/websocket/message.go
new file mode 100644
index 0000000000000000000000000000000000000000..67289c4c49964c5310fba53eb3cdebfb81449365
--- /dev/null
+++ b/websocket/message.go
@@ -0,0 +1,14 @@
+package websocket
+
+import "github.com/ethereum/go-ethereum/ethutil"
+
+type Message struct {
+	Call string        `json:"call"`
+	Args []interface{} `json:"args"`
+	Seed int           `json:"seed"`
+	Data interface{}   `json:"data"`
+}
+
+func (self *Message) Arguments() *ethutil.Value {
+	return ethutil.NewValue(self.Args)
+}
diff --git a/websocket/server.go b/websocket/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..5fd923a0c6b8c4fea6d857b2d29b71a0dab310c8
--- /dev/null
+++ b/websocket/server.go
@@ -0,0 +1,127 @@
+package websocket
+
+import (
+	"net/http"
+
+	"github.com/ethereum/go-ethereum/logger"
+
+	ws "code.google.com/p/go.net/websocket"
+)
+
+var wslogger = logger.NewLogger("WS")
+
+// Chat server.
+type Server struct {
+	httpServ  string
+	pattern   string
+	messages  []*Message
+	clients   map[int]*Client
+	addCh     chan *Client
+	delCh     chan *Client
+	sendAllCh chan string
+	doneCh    chan bool
+	errCh     chan error
+	msgFunc   MsgFunc
+}
+
+// Create new chat server.
+func NewServer(pattern, httpServ string) *Server {
+	clients := make(map[int]*Client)
+	addCh := make(chan *Client)
+	delCh := make(chan *Client)
+	sendAllCh := make(chan string)
+	doneCh := make(chan bool)
+	errCh := make(chan error)
+
+	return &Server{
+		httpServ,
+		pattern,
+		nil,
+		clients,
+		addCh,
+		delCh,
+		sendAllCh,
+		doneCh,
+		errCh,
+		nil,
+	}
+}
+
+func (s *Server) Add(c *Client) {
+	s.addCh <- c
+}
+
+func (s *Server) Del(c *Client) {
+	s.delCh <- c
+}
+
+func (s *Server) SendAll(msg string) {
+	s.sendAllCh <- msg
+}
+
+func (s *Server) Done() {
+	s.doneCh <- true
+}
+
+func (s *Server) Err(err error) {
+	s.errCh <- err
+}
+
+func (s *Server) servHTTP() {
+	wslogger.Debugln("Serving http", s.httpServ)
+	err := http.ListenAndServe(s.httpServ, nil)
+
+	wslogger.Warnln(err)
+}
+
+func (s *Server) MessageFunc(f MsgFunc) {
+	s.msgFunc = f
+}
+
+// Listen and serve.
+// It serves client connection and broadcast request.
+func (s *Server) Listen() {
+	wslogger.Debugln("Listening server...")
+
+	// ws handler
+	onConnected := func(ws *ws.Conn) {
+		defer func() {
+			err := ws.Close()
+			if err != nil {
+				s.errCh <- err
+			}
+		}()
+
+		client := NewClient(ws, s)
+		client.onMessage = s.msgFunc
+		s.Add(client)
+		client.Listen()
+	}
+	// Disable Origin check. Request don't need to come necessarily from origin.
+	http.HandleFunc(s.pattern, func(w http.ResponseWriter, req *http.Request) {
+		s := ws.Server{Handler: ws.Handler(onConnected)}
+		s.ServeHTTP(w, req)
+	})
+	wslogger.Debugln("Created handler")
+
+	go s.servHTTP()
+
+	for {
+		select {
+
+		// Add new a client
+		case c := <-s.addCh:
+			s.clients[c.id] = c
+
+		// del a client
+		case c := <-s.delCh:
+			delete(s.clients, c.id)
+
+		case err := <-s.errCh:
+			wslogger.Debugln("Error:", err.Error())
+
+		case <-s.doneCh:
+			return
+		}
+	}
+}
diff --git a/whisper/envelope.go b/whisper/envelope.go
new file mode 100644
index 0000000000000000000000000000000000000000..683e881283faedc09faf07c045da930c7284f64e
--- /dev/null
+++ b/whisper/envelope.go
@@ -0,0 +1,121 @@
+package whisper
+
+import (
+	"bytes"
+	"crypto/ecdsa"
+	"encoding/binary"
+	"fmt"
+	"io"
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/rlp"
+)
+
+const (
+	DefaultPow = 50 * time.Millisecond
+)
+
+type Envelope struct {
+	Expiry uint32 // Whisper protocol specifies int32, really should be int64
+	Ttl    uint32 // ^^^^^^
+	Topics [][]byte
+	Data   []byte
+	Nonce  uint32
+
+	hash Hash
+}
+
+func NewEnvelopeFromReader(reader io.Reader) (*Envelope, error) {
+	var envelope Envelope
+
+	buf := new(bytes.Buffer)
+	buf.ReadFrom(reader)
+
+	h := H(crypto.Sha3(buf.Bytes()))
+	if err := rlp.Decode(buf, &envelope); err != nil {
+		return nil, err
+	}
+
+	envelope.hash = h
+
+	return &envelope, nil
+}
+
+func (self *Envelope) Hash() Hash {
+	if self.hash == EmptyHash {
+		self.hash = H(crypto.Sha3(ethutil.Encode(self)))
+	}
+
+	return self.hash
+}
+
+func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope {
+	exp := time.Now().Add(ttl)
+
+	return &Envelope{uint32(exp.Unix()), uint32(ttl.Seconds()), topics, data.Bytes(), 0, Hash{}}
+}
+
+func (self *Envelope) Seal(pow time.Duration) {
+	self.proveWork(pow)
+}
+
+func (self *Envelope) Open(prv *ecdsa.PrivateKey) (msg *Message, err error) {
+	data := self.Data
+	var message Message
+	dataStart := 1
+	if data[0] > 0 {
+		if len(data) < 66 {
+			return nil, fmt.Errorf("unable to open envelope. First bit set but len(data) < 66")
+		}
+		dataStart = 66
+		message.Flags = data[0]
+		message.Signature = data[1:66]
+	}
+	message.Payload = data[dataStart:]
+	if prv != nil {
+		message.Payload, err = crypto.Decrypt(prv, message.Payload)
+		if err != nil {
+			return nil, fmt.Errorf("unable to open envelope. Decrypt failed: %v", err)
+		}
+	}
+
+	return &message, nil
+}
+
+func (self *Envelope) proveWork(dura time.Duration) {
+	var bestBit int
+	d := make([]byte, 64)
+	copy(d[:32], ethutil.Encode(self.withoutNonce()))
+
+	then := time.Now().Add(dura).UnixNano()
+	for n := uint32(0); time.Now().UnixNano() < then; {
+		for i := 0; i < 1024; i++ {
+			binary.BigEndian.PutUint32(d[60:], n)
+
+			fbs := ethutil.FirstBitSet(ethutil.BigD(crypto.Sha3(d)))
+			if fbs > bestBit {
+				bestBit = fbs
+				self.Nonce = n
+			}
+
+			n++
+		}
+	}
+}
+
+func (self *Envelope) valid() bool {
+	d := make([]byte, 64)
+	copy(d[:32], ethutil.Encode(self.withoutNonce()))
+	binary.BigEndian.PutUint32(d[60:], self.Nonce)
+	return ethutil.FirstBitSet(ethutil.BigD(crypto.Sha3(d))) > 0
+}
+
+func (self *Envelope) withoutNonce() interface{} {
+	return []interface{}{self.Expiry, self.Ttl, ethutil.ByteSliceToInterface(self.Topics), self.Data}
+}
+
+func (self *Envelope) RlpData() interface{} {
+	return []interface{}{self.Expiry, self.Ttl, ethutil.ByteSliceToInterface(self.Topics), self.Data, self.Nonce}
+}
diff --git a/whisper/filter.go b/whisper/filter.go
new file mode 100644
index 0000000000000000000000000000000000000000..4315aa5569bdf62fb437f8e52edf6edddc037a8d
--- /dev/null
+++ b/whisper/filter.go
@@ -0,0 +1,10 @@
+package whisper
+
+import "crypto/ecdsa"
+
+type Filter struct {
+	To     *ecdsa.PrivateKey
+	From   *ecdsa.PublicKey
+	Topics [][]byte
+	Fn     func(*Message)
+}
diff --git a/whisper/main.go b/whisper/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..2ee2f3ff12128e33542e706bf54fff5a46fac2ff
--- /dev/null
+++ b/whisper/main.go
@@ -0,0 +1,47 @@
+// +build none
+
+package main
+
+import (
+	"fmt"
+	"log"
+	"net"
+	"os"
+
+	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/p2p"
+	"github.com/ethereum/go-ethereum/whisper"
+	"github.com/obscuren/secp256k1-go"
+)
+
+func main() {
+	logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel))
+
+	pub, _ := secp256k1.GenerateKeyPair()
+
+	whisper := whisper.New(&event.TypeMux{})
+
+	srv := p2p.Server{
+		MaxPeers:   10,
+		Identity:   p2p.NewSimpleClientIdentity("whisper-go", "1.0", "", string(pub)),
+		ListenAddr: ":30303",
+		NAT:        p2p.UPNP(),
+
+		Protocols: []p2p.Protocol{whisper.Protocol()},
+	}
+	if err := srv.Start(); err != nil {
+		fmt.Println("could not start server:", err)
+		os.Exit(1)
+	}
+
+	// add seed peers
+	seed, err := net.ResolveTCPAddr("tcp", "poc-7.ethdev.com:30300")
+	if err != nil {
+		fmt.Println("couldn't resolve:", err)
+		os.Exit(1)
+	}
+	srv.SuggestPeer(seed.IP, seed.Port, nil)
+
+	select {}
+}
diff --git a/whisper/message.go b/whisper/message.go
new file mode 100644
index 0000000000000000000000000000000000000000..db0110b4a785d5acf6a750a8e15ec6a31e73076a
--- /dev/null
+++ b/whisper/message.go
@@ -0,0 +1,74 @@
+package whisper
+
+import (
+	"crypto/ecdsa"
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+)
+
+type Message struct {
+	Flags     byte
+	Signature []byte
+	Payload   []byte
+}
+
+func NewMessage(payload []byte) *Message {
+	return &Message{Flags: 0, Payload: payload}
+}
+
+func (self *Message) hash() []byte {
+	return crypto.Sha3(append([]byte{self.Flags}, self.Payload...))
+}
+
+func (self *Message) sign(key *ecdsa.PrivateKey) (err error) {
+	self.Flags = 1
+	self.Signature, err = crypto.Sign(self.hash(), key)
+	return
+}
+
+func (self *Message) Recover() *ecdsa.PublicKey {
+	defer func() { recover() }() // in case of invalid sig
+	return crypto.SigToPub(self.hash(), self.Signature)
+}
+
+func (self *Message) Encrypt(to *ecdsa.PublicKey) (err error) {
+	self.Payload, err = crypto.Encrypt(to, self.Payload)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (self *Message) Bytes() []byte {
+	return append([]byte{self.Flags}, append(self.Signature, self.Payload...)...)
+}
+
+type Opts struct {
+	From   *ecdsa.PrivateKey
+	To     *ecdsa.PublicKey
+	Ttl    time.Duration
+	Topics [][]byte
+}
+
+func (self *Message) Seal(pow time.Duration, opts Opts) (*Envelope, error) {
+	if opts.From != nil {
+		err := self.sign(opts.From)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	if opts.To != nil {
+		err := self.Encrypt(opts.To)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	envelope := NewEnvelope(DefaultTtl, opts.Topics, self)
+	envelope.Seal(pow)
+
+	return envelope, nil
+}
diff --git a/whisper/messages_test.go b/whisper/messages_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..cba103011d6e69e84e99655bcab5d54c0b49b71b
--- /dev/null
+++ b/whisper/messages_test.go
@@ -0,0 +1,51 @@
+package whisper
+
+import (
+	"bytes"
+	"crypto/elliptic"
+	"fmt"
+	"testing"
+
+	"github.com/ethereum/go-ethereum/crypto"
+)
+
+func TestSign(t *testing.T) {
+	prv, _ := crypto.GenerateKey()
+	msg := NewMessage([]byte("hello world"))
+	msg.sign(prv)
+
+	pubKey := msg.Recover()
+	p1 := elliptic.Marshal(crypto.S256(), prv.PublicKey.X, prv.PublicKey.Y)
+	p2 := elliptic.Marshal(crypto.S256(), pubKey.X, pubKey.Y)
+
+	if !bytes.Equal(p1, p2) {
+		t.Error("recovered pub key did not match")
+	}
+}
+
+func TestMessageEncryptDecrypt(t *testing.T) {
+	prv1, _ := crypto.GenerateKey()
+	prv2, _ := crypto.GenerateKey()
+
+	data := []byte("hello world")
+	msg := NewMessage(data)
+	envelope, err := msg.Seal(DefaultPow, Opts{
+		From: prv1,
+		To:   &prv2.PublicKey,
+	})
+	if err != nil {
+		fmt.Println(err)
+		t.FailNow()
+	}
+
+	msg1, err := envelope.Open(prv2)
+	if err != nil {
+		fmt.Println(err)
+		t.FailNow()
+	}
+
+	if !bytes.Equal(msg1.Payload, data) {
+		fmt.Println("encryption error. data did not match")
+		t.FailNow()
+	}
+}
diff --git a/whisper/peer.go b/whisper/peer.go
new file mode 100644
index 0000000000000000000000000000000000000000..d42b374b534450ead1b3e1dfc7e96b0089a72157
--- /dev/null
+++ b/whisper/peer.go
@@ -0,0 +1,128 @@
+package whisper
+
+import (
+	"fmt"
+	"io/ioutil"
+	"time"
+
+	"github.com/ethereum/go-ethereum/p2p"
+	"gopkg.in/fatih/set.v0"
+)
+
+const (
+	protocolVersion = 0x02
+)
+
+type peer struct {
+	host *Whisper
+	peer *p2p.Peer
+	ws   p2p.MsgReadWriter
+
+	// XXX Eventually this is going to reach exceptional large space. We need an expiry here
+	known *set.Set
+
+	quit chan struct{}
+}
+
+func NewPeer(host *Whisper, p *p2p.Peer, ws p2p.MsgReadWriter) *peer {
+	return &peer{host, p, ws, set.New(), make(chan struct{})}
+}
+
+func (self *peer) init() error {
+	if err := self.handleStatus(); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (self *peer) start() {
+	go self.update()
+	self.peer.Infoln("whisper started")
+}
+
+func (self *peer) stop() {
+	self.peer.Infoln("whisper stopped")
+
+	close(self.quit)
+}
+
+func (self *peer) update() {
+	relay := time.NewTicker(300 * time.Millisecond)
+out:
+	for {
+		select {
+		case <-relay.C:
+			err := self.broadcast(self.host.envelopes())
+			if err != nil {
+				self.peer.Infoln(err)
+				break out
+			}
+
+		case <-self.quit:
+			break out
+		}
+	}
+}
+
+func (self *peer) broadcast(envelopes []*Envelope) error {
+	envs := make([]interface{}, len(envelopes))
+	i := 0
+	for _, envelope := range envelopes {
+		if !self.known.Has(envelope.Hash()) {
+			envs[i] = envelope
+			self.known.Add(envelope.Hash())
+			i++
+		}
+	}
+
+	if i > 0 {
+		msg := p2p.NewMsg(envelopesMsg, envs[:i]...)
+		if err := self.ws.WriteMsg(msg); err != nil {
+			return err
+		}
+		self.peer.Infoln("broadcasted", i, "message(s)")
+	}
+
+	return nil
+}
+
+func (self *peer) addKnown(envelope *Envelope) {
+	self.known.Add(envelope.Hash())
+}
+
+func (self *peer) handleStatus() error {
+	ws := self.ws
+
+	if err := ws.WriteMsg(self.statusMsg()); err != nil {
+		return err
+	}
+
+	msg, err := ws.ReadMsg()
+	if err != nil {
+		return err
+	}
+
+	if msg.Code != statusMsg {
+		return fmt.Errorf("peer send %x before status msg", msg.Code)
+	}
+
+	data, err := ioutil.ReadAll(msg.Payload)
+	if err != nil {
+		return err
+	}
+
+	if len(data) == 0 {
+		return fmt.Errorf("malformed status. data len = 0")
+	}
+
+	if pv := data[0]; pv != protocolVersion {
+		return fmt.Errorf("protocol version mismatch %d != %d", pv, protocolVersion)
+	}
+
+	return nil
+}
+
+func (self *peer) statusMsg() p2p.Msg {
+	return p2p.NewMsg(statusMsg, protocolVersion)
+}
diff --git a/whisper/sort.go b/whisper/sort.go
new file mode 100644
index 0000000000000000000000000000000000000000..8c5b46e9e3437a9e69bea122043d6f07d1858263
--- /dev/null
+++ b/whisper/sort.go
@@ -0,0 +1,25 @@
+package whisper
+
+import "sort"
+
+type sortedKeys struct {
+	k []int32
+}
+
+func (self *sortedKeys) Len() int           { return len(self.k) }
+func (self *sortedKeys) Less(i, j int) bool { return self.k[i] < self.k[j] }
+func (self *sortedKeys) Swap(i, j int)      { self.k[i], self.k[j] = self.k[j], self.k[i] }
+
+func sortKeys(m map[int32]Hash) []int32 {
+	sorted := new(sortedKeys)
+	sorted.k = make([]int32, len(m))
+	i := 0
+	for key, _ := range m {
+		sorted.k[i] = key
+		i++
+	}
+
+	sort.Sort(sorted)
+
+	return sorted.k
+}
diff --git a/whisper/sort_test.go b/whisper/sort_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..5d8177d4101441582575ac3b1ba2f77c61fd32ee
--- /dev/null
+++ b/whisper/sort_test.go
@@ -0,0 +1,19 @@
+package whisper
+
+import "testing"
+
+func TestSorting(t *testing.T) {
+	m := map[int32]Hash{
+		1: HS("1"),
+		3: HS("3"),
+		2: HS("2"),
+		5: HS("5"),
+	}
+	exp := []int32{1, 2, 3, 5}
+	res := sortKeys(m)
+	for i, k := range res {
+		if k != exp[i] {
+			t.Error(k, "failed. Expected", exp[i])
+		}
+	}
+}
diff --git a/whisper/util.go b/whisper/util.go
new file mode 100644
index 0000000000000000000000000000000000000000..abef1d667e1769b8bc79eeae4366721cbdce6583
--- /dev/null
+++ b/whisper/util.go
@@ -0,0 +1,27 @@
+package whisper
+
+import "github.com/ethereum/go-ethereum/crypto"
+
+func hashTopic(topic []byte) []byte {
+	return crypto.Sha3(topic)[:4]
+}
+
+// NOTE this isn't DRY, but I don't want to iterate twice.
+
+// Returns a formatted topics byte slice.
+// data: unformatted data (e.g., no hashes needed)
+func Topics(data [][]byte) [][]byte {
+	d := make([][]byte, len(data))
+	for i, byts := range data {
+		d[i] = hashTopic(byts)
+	}
+	return d
+}
+
+func TopicsFromString(data []string) [][]byte {
+	d := make([][]byte, len(data))
+	for i, str := range data {
+		d[i] = hashTopic([]byte(str))
+	}
+	return d
+}
diff --git a/whisper/whisper.go b/whisper/whisper.go
new file mode 100644
index 0000000000000000000000000000000000000000..356debd1c2b5011f246af4e32e480f15aea6af50
--- /dev/null
+++ b/whisper/whisper.go
@@ -0,0 +1,246 @@
+package whisper
+
+import (
+	"bytes"
+	"crypto/ecdsa"
+	"errors"
+	"fmt"
+	"sync"
+	"time"
+
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/event/filter"
+	"github.com/ethereum/go-ethereum/p2p"
+	"gopkg.in/fatih/set.v0"
+)
+
+// MOVE ME
+type Hash struct {
+	hash string
+}
+
+var EmptyHash Hash
+
+func H(hash []byte) Hash {
+	return Hash{string(hash)}
+}
+func HS(hash string) Hash {
+	return Hash{hash}
+}
+
+func (self Hash) Compare(other Hash) int {
+	return bytes.Compare([]byte(self.hash), []byte(other.hash))
+}
+
+// MOVE ME END
+
+const (
+	statusMsg    = 0x0
+	envelopesMsg = 0x01
+)
+
+type MessageEvent struct {
+	To      *ecdsa.PrivateKey
+	From    *ecdsa.PublicKey
+	Message *Message
+}
+
+const DefaultTtl = 50 * time.Second
+
+type Whisper struct {
+	protocol p2p.Protocol
+	filters  *filter.Filters
+
+	mmu      sync.RWMutex
+	messages map[Hash]*Envelope
+	expiry   map[uint32]*set.SetNonTS
+
+	quit chan struct{}
+
+	keys []*ecdsa.PrivateKey
+}
+
+func New() *Whisper {
+	whisper := &Whisper{
+		messages: make(map[Hash]*Envelope),
+		filters:  filter.New(),
+		expiry:   make(map[uint32]*set.SetNonTS),
+		quit:     make(chan struct{}),
+	}
+	whisper.filters.Start()
+	go whisper.update()
+
+	// XXX TODO REMOVE TESTING CODE
+	msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now())))
+	envelope, _ := msg.Seal(DefaultPow, Opts{
+		Ttl: DefaultTtl,
+	})
+	if err := whisper.Send(envelope); err != nil {
+		fmt.Println(err)
+	}
+	// XXX TODO REMOVE TESTING CODE
+
+	// p2p whisper sub protocol handler
+	whisper.protocol = p2p.Protocol{
+		Name:    "shh",
+		Version: 2,
+		Length:  2,
+		Run:     whisper.msgHandler,
+	}
+
+	return whisper
+}
+
+func (self *Whisper) Stop() {
+	close(self.quit)
+}
+
+func (self *Whisper) Send(envelope *Envelope) error {
+	return self.add(envelope)
+}
+
+func (self *Whisper) NewIdentity() *ecdsa.PrivateKey {
+	key, err := crypto.GenerateKey()
+	if err != nil {
+		panic(err)
+	}
+	self.keys = append(self.keys, key)
+
+	return key
+}
+
+func (self *Whisper) HasIdentity(key *ecdsa.PrivateKey) bool {
+	for _, key := range self.keys {
+		if key.D.Cmp(key.D) == 0 {
+			return true
+		}
+	}
+	return false
+}
+
+func (self *Whisper) Watch(opts Filter) int {
+	return self.filters.Install(filter.Generic{
+		Str1: string(crypto.FromECDSA(opts.To)),
+		Str2: string(crypto.FromECDSAPub(opts.From)),
+		Fn: func(data interface{}) {
+			opts.Fn(data.(*Message))
+		},
+	})
+}
+
+// Main handler for passing whisper messages to whisper peer objects
+func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error {
+	wpeer := NewPeer(self, peer, ws)
+	// initialise whisper peer (handshake/status)
+	if err := wpeer.init(); err != nil {
+		return err
+	}
+	// kick of the main handler for broadcasting/managing envelopes
+	go wpeer.start()
+	defer wpeer.stop()
+
+	// Main *read* loop. Writing is done by the peer it self.
+	for {
+		msg, err := ws.ReadMsg()
+		if err != nil {
+			return err
+		}
+
+		envelope, err := NewEnvelopeFromReader(msg.Payload)
+		if err != nil {
+			peer.Infoln(err)
+			continue
+		}
+
+		if err := self.add(envelope); err != nil {
+			// TODO Punish peer here. Invalid envelope.
+			peer.Infoln(err)
+		}
+		wpeer.addKnown(envelope)
+	}
+}
+
+// takes care of adding envelopes to the messages pool. At this moment no sanity checks are being performed.
+func (self *Whisper) add(envelope *Envelope) error {
+	if !envelope.valid() {
+		return errors.New("invalid pow provided for envelope")
+	}
+
+	self.mmu.Lock()
+	defer self.mmu.Unlock()
+
+	hash := envelope.Hash()
+	self.messages[hash] = envelope
+	if self.expiry[envelope.Expiry] == nil {
+		self.expiry[envelope.Expiry] = set.NewNonTS()
+	}
+
+	if !self.expiry[envelope.Expiry].Has(hash) {
+		self.expiry[envelope.Expiry].Add(hash)
+		self.postEvent(envelope)
+	}
+
+	return nil
+}
+
+func (self *Whisper) update() {
+	expire := time.NewTicker(800 * time.Millisecond)
+out:
+	for {
+		select {
+		case <-expire.C:
+			self.expire()
+		case <-self.quit:
+			break out
+		}
+	}
+}
+
+func (self *Whisper) expire() {
+	self.mmu.Lock()
+	defer self.mmu.Unlock()
+
+	now := uint32(time.Now().Unix())
+	for then, hashSet := range self.expiry {
+		if then > now {
+			continue
+		}
+
+		hashSet.Each(func(v interface{}) bool {
+			delete(self.messages, v.(Hash))
+			return true
+		})
+		self.expiry[then].Clear()
+	}
+}
+
+func (self *Whisper) envelopes() (envelopes []*Envelope) {
+	self.mmu.RLock()
+	defer self.mmu.RUnlock()
+
+	envelopes = make([]*Envelope, len(self.messages))
+	i := 0
+	for _, envelope := range self.messages {
+		envelopes[i] = envelope
+		i++
+	}
+
+	return
+}
+
+func (self *Whisper) postEvent(envelope *Envelope) {
+	for _, key := range self.keys {
+		if message, err := envelope.Open(key); err == nil {
+			// Create a custom filter?
+			self.filters.Notify(filter.Generic{
+				Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())),
+			}, message)
+		} else {
+			fmt.Println(err)
+		}
+	}
+}
+
+func (self *Whisper) Protocol() p2p.Protocol {
+	return self.protocol
+}
diff --git a/whisper/whisper_test.go b/whisper/whisper_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..107cb8c978fe02e52df5bd25523ccc94e1a45e65
--- /dev/null
+++ b/whisper/whisper_test.go
@@ -0,0 +1,47 @@
+package whisper
+
+import (
+	"fmt"
+	"testing"
+	"time"
+)
+
+func TestKeyManagement(t *testing.T) {
+	whisper := New()
+
+	key := whisper.NewIdentity()
+	if !whisper.HasIdentity(key) {
+		t.Error("expected whisper to have identify")
+	}
+}
+
+func TestEvent(t *testing.T) {
+	res := make(chan *Message, 1)
+	whisper := New()
+	id := whisper.NewIdentity()
+	whisper.Watch(Filter{
+		To: id,
+		Fn: func(msg *Message) {
+			res <- msg
+		},
+	})
+
+	msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now())))
+	envelope, err := msg.Seal(DefaultPow, Opts{
+		Ttl:  DefaultTtl,
+		From: id,
+		To:   &id.PublicKey,
+	})
+	if err != nil {
+		fmt.Println(err)
+		t.FailNow()
+	}
+
+	tick := time.NewTicker(time.Second)
+	whisper.postEvent(envelope)
+	select {
+	case <-res:
+	case <-tick.C:
+		t.Error("did not receive message")
+	}
+}
diff --git a/wire/.gitignore b/wire/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f725d58d14f7d1b6a8c41c45f78b4f38f529ae9e
--- /dev/null
+++ b/wire/.gitignore
@@ -0,0 +1,12 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile ~/.gitignore_global
+
+/tmp
+*/**/*un~
+*un~
+.DS_Store
+*/**/.DS_Store
+
diff --git a/wire/README.md b/wire/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f63688b3cfe2e083c1eeeb4a3096975442c94c1
--- /dev/null
+++ b/wire/README.md
@@ -0,0 +1,36 @@
+# ethwire
+
+The ethwire package contains the ethereum wire protocol. The ethwire
+package is required to write and read from the ethereum network.
+
+# Installation
+
+`go get github.com/ethereum/ethwire-go`
+
+# Messaging overview
+
+The Ethereum Wire protocol defines the communication between the nodes
+running Ethereum. Further reader reading can be done on the
+[Wiki](http://wiki.ethereum.org/index.php/Wire_Protocol).
+
+# Reading Messages
+
+```go
+// Read and validate the next eth message from the provided connection.
+// returns a error message with the details.
+msg, err := ethwire.ReadMessage(conn)
+if err != nil {
+  // Handle error
+}
+```
+
+# Writing Messages
+
+```go
+// Constructs a message which can be interpreted by the eth network.
+// Write the inventory to network
+err := ethwire.WriteMessage(conn, &Msg{
+  Type: ethwire.MsgInvTy,
+  Data : []interface{}{...},
+})
+```
diff --git a/wire/client_identity.go b/wire/client_identity.go
new file mode 100644
index 0000000000000000000000000000000000000000..0a268024a92b9b39ce9cbfbbc698a439e05271bc
--- /dev/null
+++ b/wire/client_identity.go
@@ -0,0 +1,56 @@
+package wire
+
+import (
+	"fmt"
+	"runtime"
+)
+
+// should be used in Peer handleHandshake, incorporate Caps, ProtocolVersion, Pubkey etc.
+type ClientIdentity interface {
+	String() string
+}
+
+type SimpleClientIdentity struct {
+	clientIdentifier string
+	version          string
+	customIdentifier string
+	os               string
+	implementation   string
+}
+
+func NewSimpleClientIdentity(clientIdentifier string, version string, customIdentifier string) *SimpleClientIdentity {
+	clientIdentity := &SimpleClientIdentity{
+		clientIdentifier: clientIdentifier,
+		version:          version,
+		customIdentifier: customIdentifier,
+		os:               runtime.GOOS,
+		implementation:   runtime.Version(),
+	}
+
+	return clientIdentity
+}
+
+func (c *SimpleClientIdentity) init() {
+}
+
+func (c *SimpleClientIdentity) String() string {
+	var id string
+	if len(c.customIdentifier) > 0 {
+		id = "/" + c.customIdentifier
+	}
+
+	return fmt.Sprintf("%s/v%s%s/%s/%s",
+		c.clientIdentifier,
+		c.version,
+		id,
+		c.os,
+		c.implementation)
+}
+
+func (c *SimpleClientIdentity) SetCustomIdentifier(customIdentifier string) {
+	c.customIdentifier = customIdentifier
+}
+
+func (c *SimpleClientIdentity) GetCustomIdentifier() string {
+	return c.customIdentifier
+}
diff --git a/wire/client_identity_test.go b/wire/client_identity_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c0e7a0159aff4ea30f6527f0f070ed67f7db5526
--- /dev/null
+++ b/wire/client_identity_test.go
@@ -0,0 +1,30 @@
+package wire
+
+import (
+	"fmt"
+	"runtime"
+	"testing"
+)
+
+func TestClientIdentity(t *testing.T) {
+	clientIdentity := NewSimpleClientIdentity("Ethereum(G)", "0.5.16", "test")
+	clientString := clientIdentity.String()
+	expected := fmt.Sprintf("Ethereum(G)/v0.5.16/test/%s/%s", runtime.GOOS, runtime.Version())
+	if clientString != expected {
+		t.Errorf("Expected clientIdentity to be %q, got %q", expected, clientString)
+	}
+	customIdentifier := clientIdentity.GetCustomIdentifier()
+	if customIdentifier != "test" {
+		t.Errorf("Expected clientIdentity.GetCustomIdentifier() to be 'test', got %q", customIdentifier)
+	}
+	clientIdentity.SetCustomIdentifier("test2")
+	customIdentifier = clientIdentity.GetCustomIdentifier()
+	if customIdentifier != "test2" {
+		t.Errorf("Expected clientIdentity.GetCustomIdentifier() to be 'test2', got %q", customIdentifier)
+	}
+	clientString = clientIdentity.String()
+	expected = fmt.Sprintf("Ethereum(G)/v0.5.16/test2/%s/%s", runtime.GOOS, runtime.Version())
+	if clientString != expected {
+		t.Errorf("Expected clientIdentity to be %q, got %q", expected, clientString)
+	}
+}
diff --git a/wire/messages2.go b/wire/messages2.go
new file mode 100644
index 0000000000000000000000000000000000000000..acbd9e0d5cc07f052316f0578c9fdfe40550821b
--- /dev/null
+++ b/wire/messages2.go
@@ -0,0 +1,199 @@
+package wire
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"net"
+	"time"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+// The connection object allows you to set up a connection to the Ethereum network.
+// The Connection object takes care of all encoding and sending objects properly over
+// the network.
+type Connection struct {
+	conn            net.Conn
+	nTimeout        time.Duration
+	pendingMessages Messages
+}
+
+// Create a new connection to the Ethereum network
+func New(conn net.Conn) *Connection {
+	return &Connection{conn: conn, nTimeout: 500}
+}
+
+// Read, reads from the network. It will block until the next message is received.
+func (self *Connection) Read() *Msg {
+	if len(self.pendingMessages) == 0 {
+		self.readMessages()
+	}
+
+	ret := self.pendingMessages[0]
+	self.pendingMessages = self.pendingMessages[1:]
+
+	return ret
+
+}
+
+// Write to the Ethereum network specifying the type of the message and
+// the data. Data can be of type RlpEncodable or []interface{}. Returns
+// nil or if something went wrong an error.
+func (self *Connection) Write(typ MsgType, v ...interface{}) error {
+	var pack []byte
+
+	slice := [][]interface{}{[]interface{}{byte(typ)}}
+	for _, value := range v {
+		if encodable, ok := value.(ethutil.RlpEncodeDecode); ok {
+			slice = append(slice, encodable.RlpValue())
+		} else if raw, ok := value.([]interface{}); ok {
+			slice = append(slice, raw)
+		} else {
+			panic(fmt.Sprintf("Unable to 'write' object of type %T", value))
+		}
+	}
+
+	// Encode the type and the (RLP encoded) data for sending over the wire
+	encoded := ethutil.NewValue(slice).Encode()
+	payloadLength := ethutil.NumberToBytes(uint32(len(encoded)), 32)
+
+	// Write magic token and payload length (first 8 bytes)
+	pack = append(MagicToken, payloadLength...)
+	pack = append(pack, encoded...)
+
+	// Write to the connection
+	_, err := self.conn.Write(pack)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (self *Connection) readMessage(data []byte) (msg *Msg, remaining []byte, done bool, err error) {
+	if len(data) == 0 {
+		return nil, nil, true, nil
+	}
+
+	if len(data) <= 8 {
+		return nil, remaining, false, errors.New("Invalid message")
+	}
+
+	// Check if the received 4 first bytes are the magic token
+	if bytes.Compare(MagicToken, data[:4]) != 0 {
+		return nil, nil, false, fmt.Errorf("MagicToken mismatch. Received %v", data[:4])
+	}
+
+	messageLength := ethutil.BytesToNumber(data[4:8])
+	remaining = data[8+messageLength:]
+	if int(messageLength) > len(data[8:]) {
+		return nil, nil, false, fmt.Errorf("message length %d, expected %d", len(data[8:]), messageLength)
+	}
+
+	message := data[8 : 8+messageLength]
+	decoder := ethutil.NewValueFromBytes(message)
+	// Type of message
+	t := decoder.Get(0).Uint()
+	// Actual data
+	d := decoder.SliceFrom(1)
+
+	msg = &Msg{
+		Type: MsgType(t),
+		Data: d,
+	}
+
+	return
+}
+
+// The basic message reader waits for data on the given connection, decoding
+// and doing a few sanity checks such as if there's a data type and
+// unmarhals the given data
+func (self *Connection) readMessages() (err error) {
+	// The recovering function in case anything goes horribly wrong
+	defer func() {
+		if r := recover(); r != nil {
+			err = fmt.Errorf("wire.ReadMessage error: %v", r)
+		}
+	}()
+
+	// Buff for writing network message to
+	//buff := make([]byte, 1440)
+	var buff []byte
+	var totalBytes int
+	for {
+		// Give buffering some time
+		self.conn.SetReadDeadline(time.Now().Add(self.nTimeout * time.Millisecond))
+		// Create a new temporarily buffer
+		b := make([]byte, 1440)
+		// Wait for a message from this peer
+		n, _ := self.conn.Read(b)
+		if err != nil && n == 0 {
+			if err.Error() != "EOF" {
+				fmt.Println("err now", err)
+				return err
+			} else {
+				break
+			}
+
+			// Messages can't be empty
+		} else if n == 0 {
+			break
+		}
+
+		buff = append(buff, b[:n]...)
+		totalBytes += n
+	}
+
+	// Reslice buffer
+	buff = buff[:totalBytes]
+	msg, remaining, done, err := self.readMessage(buff)
+	for ; done != true; msg, remaining, done, err = self.readMessage(remaining) {
+		//log.Println("rx", msg)
+
+		if msg != nil {
+			self.pendingMessages = append(self.pendingMessages, msg)
+		}
+	}
+
+	return
+}
+
+func ReadMessage(data []byte) (msg *Msg, remaining []byte, done bool, err error) {
+	if len(data) == 0 {
+		return nil, nil, true, nil
+	}
+
+	if len(data) <= 8 {
+		return nil, remaining, false, errors.New("Invalid message")
+	}
+
+	// Check if the received 4 first bytes are the magic token
+	if bytes.Compare(MagicToken, data[:4]) != 0 {
+		return nil, nil, false, fmt.Errorf("MagicToken mismatch. Received %v", data[:4])
+	}
+
+	messageLength := ethutil.BytesToNumber(data[4:8])
+	remaining = data[8+messageLength:]
+	if int(messageLength) > len(data[8:]) {
+		return nil, nil, false, fmt.Errorf("message length %d, expected %d", len(data[8:]), messageLength)
+	}
+
+	message := data[8 : 8+messageLength]
+	decoder := ethutil.NewValueFromBytes(message)
+	// Type of message
+	t := decoder.Get(0).Uint()
+	// Actual data
+	d := decoder.SliceFrom(1)
+
+	msg = &Msg{
+		Type: MsgType(t),
+		Data: d,
+	}
+
+	return
+}
+
+func bufferedRead(conn net.Conn) ([]byte, error) {
+	return nil, nil
+}
diff --git a/wire/messaging.go b/wire/messaging.go
new file mode 100644
index 0000000000000000000000000000000000000000..9c6cb5944e057f40afd1634cea6c5f4218c70cb3
--- /dev/null
+++ b/wire/messaging.go
@@ -0,0 +1,178 @@
+// Package wire provides low level access to the Ethereum network and allows
+// you to broadcast data over the network.
+package wire
+
+import (
+	"bytes"
+	"fmt"
+	"net"
+	"time"
+
+	"github.com/ethereum/go-ethereum/ethutil"
+)
+
+// Connection interface describing the methods required to implement the wire protocol.
+type Conn interface {
+	Write(typ MsgType, v ...interface{}) error
+	Read() *Msg
+}
+
+// The magic token which should be the first 4 bytes of every message and can be used as separator between messages.
+var MagicToken = []byte{34, 64, 8, 145}
+
+type MsgType byte
+
+const (
+	// Values are given explicitly instead of by iota because these values are
+	// defined by the wire protocol spec; it is easier for humans to ensure
+	// correctness when values are explicit.
+	MsgHandshakeTy = 0x00
+	MsgDiscTy      = 0x01
+	MsgPingTy      = 0x02
+	MsgPongTy      = 0x03
+	MsgGetPeersTy  = 0x04
+	MsgPeersTy     = 0x05
+
+	MsgStatusTy         = 0x10
+	MsgTxTy             = 0x12
+	MsgGetBlockHashesTy = 0x13
+	MsgBlockHashesTy    = 0x14
+	MsgGetBlocksTy      = 0x15
+	MsgBlockTy          = 0x16
+	MsgNewBlockTy       = 0x17
+)
+
+var msgTypeToString = map[MsgType]string{
+	MsgHandshakeTy: "Handshake",
+	MsgDiscTy:      "Disconnect",
+	MsgPingTy:      "Ping",
+	MsgPongTy:      "Pong",
+	MsgGetPeersTy:  "Get peers",
+	MsgStatusTy:    "Status",
+	MsgPeersTy:     "Peers",
+	MsgTxTy:        "Transactions",
+	MsgBlockTy:     "Blocks",
+	//MsgGetTxsTy:         "Get Txs",
+	MsgGetBlockHashesTy: "Get block hashes",
+	MsgBlockHashesTy:    "Block hashes",
+	MsgGetBlocksTy:      "Get blocks",
+}
+
+func (mt MsgType) String() string {
+	return msgTypeToString[mt]
+}
+
+type Msg struct {
+	Type MsgType // Specifies how the encoded data should be interpreted
+	//Data []byte
+	Data *ethutil.Value
+}
+
+func NewMessage(msgType MsgType, data interface{}) *Msg {
+	return &Msg{
+		Type: msgType,
+		Data: ethutil.NewValue(data),
+	}
+}
+
+type Messages []*Msg
+
+// The basic message reader waits for data on the given connection, decoding
+// and doing a few sanity checks such as if there's a data type and
+// unmarhals the given data
+func ReadMessages(conn net.Conn) (msgs []*Msg, err error) {
+	// The recovering function in case anything goes horribly wrong
+	defer func() {
+		if r := recover(); r != nil {
+			err = fmt.Errorf("wire.ReadMessage error: %v", r)
+		}
+	}()
+
+	var (
+		buff      []byte
+		messages  [][]byte
+		msgLength int
+	)
+
+	for {
+		// Give buffering some time
+		conn.SetReadDeadline(time.Now().Add(5 * time.Millisecond))
+		// Create a new temporarily buffer
+		b := make([]byte, 1440)
+		n, _ := conn.Read(b)
+		if err != nil && n == 0 {
+			if err.Error() != "EOF" {
+				fmt.Println("err now", err)
+				return nil, err
+			} else {
+				break
+			}
+		}
+
+		if n == 0 && len(buff) == 0 {
+			// If there's nothing on the wire wait for a bit
+			time.Sleep(200 * time.Millisecond)
+
+			continue
+		}
+
+		buff = append(buff, b[:n]...)
+		if msgLength == 0 {
+			// Check if the received 4 first bytes are the magic token
+			if bytes.Compare(MagicToken, buff[:4]) != 0 {
+				return nil, fmt.Errorf("MagicToken mismatch. Received %v", buff[:4])
+			}
+
+			// Read the length of the message
+			msgLength = int(ethutil.BytesToNumber(buff[4:8]))
+
+			// Remove the token and length
+			buff = buff[8:]
+		}
+
+		if len(buff) >= msgLength {
+			messages = append(messages, buff[:msgLength])
+			buff = buff[msgLength:]
+			msgLength = 0
+
+			if len(buff) == 0 {
+				break
+			}
+		}
+	}
+
+	for _, m := range messages {
+		decoder := ethutil.NewValueFromBytes(m)
+		// Type of message
+		t := decoder.Get(0).Uint()
+		// Actual data
+		d := decoder.SliceFrom(1)
+
+		msgs = append(msgs, &Msg{Type: MsgType(t), Data: d})
+	}
+
+	return
+}
+
+// The basic message writer takes care of writing data over the given
+// connection and does some basic error checking
+func WriteMessage(conn net.Conn, msg *Msg) error {
+	var pack []byte
+
+	// Encode the type and the (RLP encoded) data for sending over the wire
+	encoded := ethutil.NewValue(append([]interface{}{byte(msg.Type)}, msg.Data.Slice()...)).Encode()
+	payloadLength := ethutil.NumberToBytes(uint32(len(encoded)), 32)
+
+	// Write magic token and payload length (first 8 bytes)
+	pack = append(MagicToken, payloadLength...)
+	pack = append(pack, encoded...)
+	//fmt.Printf("payload %v (%v) %q\n", msg.Type, conn.RemoteAddr(), encoded)
+
+	// Write to the connection
+	_, err := conn.Write(pack)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
diff --git a/xeth/config.go b/xeth/config.go
new file mode 100644
index 0000000000000000000000000000000000000000..ad0660d759fbac48ff7c4f218b5c5bc444deb7eb
--- /dev/null
+++ b/xeth/config.go
@@ -0,0 +1,35 @@
+package xeth
+
+import "github.com/ethereum/go-ethereum/ethutil"
+
+var cnfCtr = ethutil.Hex2Bytes("661005d2720d855f1d9976f88bb10c1a3398c77f")
+
+type Config struct {
+	pipe *XEth
+}
+
+func (self *Config) Get(name string) *Object {
+	configCtrl := self.pipe.World().safeGet(cnfCtr)
+	var addr []byte
+
+	switch name {
+	case "NameReg":
+		addr = []byte{0}
+	case "DnsReg":
+		objectAddr := configCtrl.GetStorage(ethutil.BigD([]byte{0}))
+		domainAddr := (&Object{self.pipe.World().safeGet(objectAddr.Bytes())}).StorageString("DnsReg").Bytes()
+		return &Object{self.pipe.World().safeGet(domainAddr)}
+	case "MergeMining":
+		addr = []byte{4}
+	default:
+		addr = ethutil.RightPadBytes([]byte(name), 32)
+	}
+
+	objectAddr := configCtrl.GetStorage(ethutil.BigD(addr))
+
+	return &Object{self.pipe.World().safeGet(objectAddr.Bytes())}
+}
+
+func (self *Config) Exist() bool {
+	return self.pipe.World().Get(cnfCtr) != nil
+}
diff --git a/xeth/hexface.go b/xeth/hexface.go
new file mode 100644
index 0000000000000000000000000000000000000000..bfd2dddd903467e289279baa4a12892d7cf4a390
--- /dev/null
+++ b/xeth/hexface.go
@@ -0,0 +1,255 @@
+package xeth
+
+import (
+	"bytes"
+	"encoding/json"
+	"sync/atomic"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type JSXEth struct {
+	*XEth
+}
+
+func NewJSXEth(eth core.EthManager) *JSXEth {
+	return &JSXEth{New(eth)}
+}
+
+func (self *JSXEth) BlockByHash(strHash string) *JSBlock {
+	hash := ethutil.Hex2Bytes(strHash)
+	block := self.obj.ChainManager().GetBlock(hash)
+
+	return NewJSBlock(block)
+}
+
+func (self *JSXEth) BlockByNumber(num int32) *JSBlock {
+	if num == -1 {
+		return NewJSBlock(self.obj.ChainManager().CurrentBlock())
+	}
+
+	return NewJSBlock(self.obj.ChainManager().GetBlockByNumber(uint64(num)))
+}
+
+func (self *JSXEth) Block(v interface{}) *JSBlock {
+	if n, ok := v.(int32); ok {
+		return self.BlockByNumber(n)
+	} else if str, ok := v.(string); ok {
+		return self.BlockByHash(str)
+	} else if f, ok := v.(float64); ok { // Don't ask ...
+		return self.BlockByNumber(int32(f))
+	}
+
+	return nil
+}
+
+func (self *JSXEth) Key() *JSKey {
+	return NewJSKey(self.obj.KeyManager().KeyPair())
+}
+
+func (self *JSXEth) StateObject(addr string) *JSObject {
+	object := &Object{self.World().safeGet(ethutil.Hex2Bytes(addr))}
+
+	return NewJSObject(object)
+}
+
+func (self *JSXEth) PeerCount() int {
+	return self.obj.PeerCount()
+}
+
+func (self *JSXEth) Peers() []JSPeer {
+	var peers []JSPeer
+	for peer := self.obj.Peers().Front(); peer != nil; peer = peer.Next() {
+		p := peer.Value.(core.Peer)
+		// we only want connected peers
+		if atomic.LoadInt32(p.Connected()) != 0 {
+			peers = append(peers, *NewJSPeer(p))
+		}
+	}
+
+	return peers
+}
+
+func (self *JSXEth) IsMining() bool {
+	return self.obj.IsMining()
+}
+
+func (self *JSXEth) IsListening() bool {
+	return self.obj.IsListening()
+}
+
+func (self *JSXEth) CoinBase() string {
+	return ethutil.Bytes2Hex(self.obj.KeyManager().Address())
+}
+
+func (self *JSXEth) NumberToHuman(balance string) string {
+	b := ethutil.Big(balance)
+
+	return ethutil.CurrencyToString(b)
+}
+
+func (self *JSXEth) StorageAt(addr, storageAddr string) string {
+	storage := self.World().SafeGet(ethutil.Hex2Bytes(addr)).Storage(ethutil.Hex2Bytes(storageAddr))
+
+	return ethutil.Bytes2Hex(storage.Bytes())
+}
+
+func (self *JSXEth) BalanceAt(addr string) string {
+	return self.World().SafeGet(ethutil.Hex2Bytes(addr)).Balance().String()
+}
+
+func (self *JSXEth) TxCountAt(address string) int {
+	return int(self.World().SafeGet(ethutil.Hex2Bytes(address)).Nonce)
+}
+
+func (self *JSXEth) CodeAt(address string) string {
+	return ethutil.Bytes2Hex(self.World().SafeGet(ethutil.Hex2Bytes(address)).Code)
+}
+
+func (self *JSXEth) IsContract(address string) bool {
+	return len(self.World().SafeGet(ethutil.Hex2Bytes(address)).Code) > 0
+}
+
+func (self *JSXEth) SecretToAddress(key string) string {
+	pair, err := crypto.NewKeyPairFromSec(ethutil.Hex2Bytes(key))
+	if err != nil {
+		return ""
+	}
+
+	return ethutil.Bytes2Hex(pair.Address())
+}
+
+func (self *JSXEth) Execute(addr, value, gas, price, data string) (string, error) {
+	ret, err := self.ExecuteObject(&Object{
+		self.World().safeGet(ethutil.Hex2Bytes(addr))},
+		ethutil.Hex2Bytes(data),
+		ethutil.NewValue(value),
+		ethutil.NewValue(gas),
+		ethutil.NewValue(price),
+	)
+
+	return ethutil.Bytes2Hex(ret), err
+}
+
+type KeyVal struct {
+	Key   string `json:"key"`
+	Value string `json:"value"`
+}
+
+func (self *JSXEth) EachStorage(addr string) string {
+	var values []KeyVal
+	object := self.World().SafeGet(ethutil.Hex2Bytes(addr))
+	object.EachStorage(func(name string, value *ethutil.Value) {
+		value.Decode()
+		values = append(values, KeyVal{ethutil.Bytes2Hex([]byte(name)), ethutil.Bytes2Hex(value.Bytes())})
+	})
+
+	valuesJson, err := json.Marshal(values)
+	if err != nil {
+		return ""
+	}
+
+	return string(valuesJson)
+}
+
+func (self *JSXEth) ToAscii(str string) string {
+	padded := ethutil.RightPadBytes([]byte(str), 32)
+
+	return "0x" + ethutil.Bytes2Hex(padded)
+}
+
+func (self *JSXEth) FromAscii(str string) string {
+	if ethutil.IsHex(str) {
+		str = str[2:]
+	}
+
+	return string(bytes.Trim(ethutil.Hex2Bytes(str), "\x00"))
+}
+
+func (self *JSXEth) FromNumber(str string) string {
+	if ethutil.IsHex(str) {
+		str = str[2:]
+	}
+
+	return ethutil.BigD(ethutil.Hex2Bytes(str)).String()
+}
+
+func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) {
+	var (
+		to       []byte
+		value    = ethutil.NewValue(valueStr)
+		gas      = ethutil.NewValue(gasStr)
+		gasPrice = ethutil.NewValue(gasPriceStr)
+		data     []byte
+	)
+
+	if ethutil.IsHex(codeStr) {
+		data = ethutil.Hex2Bytes(codeStr[2:])
+	} else {
+		data = ethutil.Hex2Bytes(codeStr)
+	}
+
+	if ethutil.IsHex(toStr) {
+		to = ethutil.Hex2Bytes(toStr[2:])
+	} else {
+		to = ethutil.Hex2Bytes(toStr)
+	}
+
+	var keyPair *crypto.KeyPair
+	var err error
+	if ethutil.IsHex(key) {
+		keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key[2:])))
+	} else {
+		keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key)))
+	}
+
+	if err != nil {
+		return "", err
+	}
+
+	tx, err := self.XEth.Transact(keyPair, to, value, gas, gasPrice, data)
+	if err != nil {
+		return "", err
+	}
+	if types.IsContractAddr(to) {
+		return ethutil.Bytes2Hex(core.AddressFromMessage(tx)), nil
+	}
+
+	return ethutil.Bytes2Hex(tx.Hash()), nil
+}
+
+func (self *JSXEth) PushTx(txStr string) (*JSReceipt, error) {
+	tx := types.NewTransactionFromBytes(ethutil.Hex2Bytes(txStr))
+	err := self.obj.TxPool().Add(tx)
+	if err != nil {
+		return nil, err
+	}
+
+	return NewJSReciept(core.MessageCreatesContract(tx), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil
+}
+
+func (self *JSXEth) CompileMutan(code string) string {
+	data, err := self.XEth.CompileMutan(code)
+	if err != nil {
+		return err.Error()
+	}
+
+	return ethutil.Bytes2Hex(data)
+}
+
+func (self *JSXEth) FindInConfig(str string) string {
+	return ethutil.Bytes2Hex(self.World().Config().Get(str).Address())
+}
+
+func ToJSMessages(messages state.Messages) *ethutil.List {
+	var msgs []JSMessage
+	for _, m := range messages {
+		msgs = append(msgs, NewJSMessage(m))
+	}
+
+	return ethutil.NewList(msgs)
+}
diff --git a/xeth/js_types.go b/xeth/js_types.go
new file mode 100644
index 0000000000000000000000000000000000000000..62867d6a9827e62c62e44724258041d8eb77674b
--- /dev/null
+++ b/xeth/js_types.go
@@ -0,0 +1,236 @@
+package xeth
+
+import (
+	"fmt"
+	"strconv"
+	"strings"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+// Block interface exposed to QML
+type JSBlock struct {
+	//Transactions string `json:"transactions"`
+	ref          *types.Block
+	Size         string        `json:"size"`
+	Number       int           `json:"number"`
+	Hash         string        `json:"hash"`
+	Transactions *ethutil.List `json:"transactions"`
+	Uncles       *ethutil.List `json:"uncles"`
+	Time         int64         `json:"time"`
+	Coinbase     string        `json:"coinbase"`
+	Name         string        `json:"name"`
+	GasLimit     string        `json:"gasLimit"`
+	GasUsed      string        `json:"gasUsed"`
+	PrevHash     string        `json:"prevHash"`
+	Bloom        string        `json:"bloom"`
+	Raw          string        `json:"raw"`
+}
+
+// Creates a new QML Block from a chain block
+func NewJSBlock(block *types.Block) *JSBlock {
+	if block == nil {
+		return &JSBlock{}
+	}
+
+	ptxs := make([]*JSTransaction, len(block.Transactions()))
+	for i, tx := range block.Transactions() {
+		ptxs[i] = NewJSTx(tx, block.State())
+	}
+	txlist := ethutil.NewList(ptxs)
+
+	puncles := make([]*JSBlock, len(block.Uncles))
+	for i, uncle := range block.Uncles {
+		puncles[i] = NewJSBlock(uncle)
+	}
+	ulist := ethutil.NewList(puncles)
+
+	return &JSBlock{
+		ref: block, Size: block.Size().String(),
+		Number: int(block.Number.Uint64()), GasUsed: block.GasUsed.String(),
+		GasLimit: block.GasLimit.String(), Hash: ethutil.Bytes2Hex(block.Hash()),
+		Transactions: txlist, Uncles: ulist,
+		Time:     block.Time,
+		Coinbase: ethutil.Bytes2Hex(block.Coinbase),
+		PrevHash: ethutil.Bytes2Hex(block.PrevHash),
+		Bloom:    ethutil.Bytes2Hex(block.LogsBloom),
+		Raw:      block.String(),
+	}
+}
+
+func (self *JSBlock) ToString() string {
+	if self.ref != nil {
+		return self.ref.String()
+	}
+
+	return ""
+}
+
+func (self *JSBlock) GetTransaction(hash string) *JSTransaction {
+	tx := self.ref.GetTransaction(ethutil.Hex2Bytes(hash))
+	if tx == nil {
+		return nil
+	}
+
+	return NewJSTx(tx, self.ref.State())
+}
+
+type JSTransaction struct {
+	ref *types.Transaction
+
+	Value           string `json:"value"`
+	Gas             string `json:"gas"`
+	GasPrice        string `json:"gasPrice"`
+	Hash            string `json:"hash"`
+	Address         string `json:"address"`
+	Sender          string `json:"sender"`
+	RawData         string `json:"rawData"`
+	Data            string `json:"data"`
+	Contract        bool   `json:"isContract"`
+	CreatesContract bool   `json:"createsContract"`
+	Confirmations   int    `json:"confirmations"`
+}
+
+func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction {
+	hash := ethutil.Bytes2Hex(tx.Hash())
+	receiver := ethutil.Bytes2Hex(tx.To())
+	if receiver == "0000000000000000000000000000000000000000" {
+		receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
+	}
+	sender := ethutil.Bytes2Hex(tx.Sender())
+	createsContract := core.MessageCreatesContract(tx)
+
+	var data string
+	if createsContract {
+		data = strings.Join(core.Disassemble(tx.Data()), "\n")
+	} else {
+		data = ethutil.Bytes2Hex(tx.Data())
+	}
+
+	return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: createsContract, Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())}
+}
+
+func (self *JSTransaction) ToString() string {
+	return self.ref.String()
+}
+
+type JSKey struct {
+	Address    string `json:"address"`
+	PrivateKey string `json:"privateKey"`
+	PublicKey  string `json:"publicKey"`
+}
+
+func NewJSKey(key *crypto.KeyPair) *JSKey {
+	return &JSKey{ethutil.Bytes2Hex(key.Address()), ethutil.Bytes2Hex(key.PrivateKey), ethutil.Bytes2Hex(key.PublicKey)}
+}
+
+type JSObject struct {
+	*Object
+}
+
+func NewJSObject(object *Object) *JSObject {
+	return &JSObject{object}
+}
+
+type PReceipt struct {
+	CreatedContract bool   `json:"createdContract"`
+	Address         string `json:"address"`
+	Hash            string `json:"hash"`
+	Sender          string `json:"sender"`
+}
+
+func NewPReciept(contractCreation bool, creationAddress, hash, address []byte) *PReceipt {
+	return &PReceipt{
+		contractCreation,
+		ethutil.Bytes2Hex(creationAddress),
+		ethutil.Bytes2Hex(hash),
+		ethutil.Bytes2Hex(address),
+	}
+}
+
+// Peer interface exposed to QML
+
+type JSPeer struct {
+	ref          *core.Peer
+	Inbound      bool   `json:"isInbound"`
+	LastSend     int64  `json:"lastSend"`
+	LastPong     int64  `json:"lastPong"`
+	Ip           string `json:"ip"`
+	Port         int    `json:"port"`
+	Version      string `json:"version"`
+	LastResponse string `json:"lastResponse"`
+	Latency      string `json:"latency"`
+	Caps         string `json:"caps"`
+}
+
+func NewJSPeer(peer core.Peer) *JSPeer {
+	if peer == nil {
+		return nil
+	}
+
+	var ip []string
+	for _, i := range peer.Host() {
+		ip = append(ip, strconv.Itoa(int(i)))
+	}
+	ipAddress := strings.Join(ip, ".")
+
+	var caps []string
+	capsIt := peer.Caps().NewIterator()
+	for capsIt.Next() {
+		cap := capsIt.Value().Get(0).Str()
+		ver := capsIt.Value().Get(1).Uint()
+		caps = append(caps, fmt.Sprintf("%s/%d", cap, ver))
+	}
+
+	return &JSPeer{ref: &peer, Inbound: peer.Inbound(), LastSend: peer.LastSend().Unix(), LastPong: peer.LastPong(), Version: peer.Version(), Ip: ipAddress, Port: int(peer.Port()), Latency: peer.PingTime(), Caps: "[" + strings.Join(caps, ", ") + "]"}
+}
+
+type JSReceipt struct {
+	CreatedContract bool   `json:"createdContract"`
+	Address         string `json:"address"`
+	Hash            string `json:"hash"`
+	Sender          string `json:"sender"`
+}
+
+func NewJSReciept(contractCreation bool, creationAddress, hash, address []byte) *JSReceipt {
+	return &JSReceipt{
+		contractCreation,
+		ethutil.Bytes2Hex(creationAddress),
+		ethutil.Bytes2Hex(hash),
+		ethutil.Bytes2Hex(address),
+	}
+}
+
+type JSMessage struct {
+	To        string `json:"to"`
+	From      string `json:"from"`
+	Input     string `json:"input"`
+	Output    string `json:"output"`
+	Path      int32  `json:"path"`
+	Origin    string `json:"origin"`
+	Timestamp int32  `json:"timestamp"`
+	Coinbase  string `json:"coinbase"`
+	Block     string `json:"block"`
+	Number    int32  `json:"number"`
+	Value     string `json:"value"`
+}
+
+func NewJSMessage(message *state.Message) JSMessage {
+	return JSMessage{
+		To:        ethutil.Bytes2Hex(message.To),
+		From:      ethutil.Bytes2Hex(message.From),
+		Input:     ethutil.Bytes2Hex(message.Input),
+		Output:    ethutil.Bytes2Hex(message.Output),
+		Path:      int32(message.Path),
+		Origin:    ethutil.Bytes2Hex(message.Origin),
+		Timestamp: int32(message.Timestamp),
+		Coinbase:  ethutil.Bytes2Hex(message.Origin),
+		Block:     ethutil.Bytes2Hex(message.Block),
+		Number:    int32(message.Number.Int64()),
+		Value:     message.Value.String(),
+	}
+}
diff --git a/xeth/object.go b/xeth/object.go
new file mode 100644
index 0000000000000000000000000000000000000000..a4ac41e8921d2499b739b22b15e06fa03661e80a
--- /dev/null
+++ b/xeth/object.go
@@ -0,0 +1,26 @@
+package xeth
+
+import (
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type Object struct {
+	*state.StateObject
+}
+
+func (self *Object) StorageString(str string) *ethutil.Value {
+	if ethutil.IsHex(str) {
+		return self.Storage(ethutil.Hex2Bytes(str[2:]))
+	} else {
+		return self.Storage(ethutil.RightPadBytes([]byte(str), 32))
+	}
+}
+
+func (self *Object) StorageValue(addr *ethutil.Value) *ethutil.Value {
+	return self.Storage(addr.Bytes())
+}
+
+func (self *Object) Storage(addr []byte) *ethutil.Value {
+	return self.StateObject.GetStorage(ethutil.BigD(addr))
+}
diff --git a/xeth/pipe.go b/xeth/pipe.go
new file mode 100644
index 0000000000000000000000000000000000000000..06820cc8656862abd977aebce17a53732b9e0365
--- /dev/null
+++ b/xeth/pipe.go
@@ -0,0 +1,181 @@
+package xeth
+
+/*
+ * eXtended ETHereum
+ */
+
+import (
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/state"
+)
+
+var pipelogger = logger.NewLogger("XETH")
+
+type VmVars struct {
+	State *state.StateDB
+}
+
+type XEth struct {
+	obj          core.EthManager
+	blockManager *core.BlockManager
+	chainManager *core.ChainManager
+	world        *World
+
+	Vm VmVars
+}
+
+func New(obj core.EthManager) *XEth {
+	pipe := &XEth{
+		obj:          obj,
+		blockManager: obj.BlockManager(),
+		chainManager: obj.ChainManager(),
+	}
+	pipe.world = NewWorld(pipe)
+
+	return pipe
+}
+
+/*
+ * State / Account accessors
+ */
+func (self *XEth) Balance(addr []byte) *ethutil.Value {
+	return ethutil.NewValue(self.World().safeGet(addr).Balance)
+}
+
+func (self *XEth) Nonce(addr []byte) uint64 {
+	return self.World().safeGet(addr).Nonce
+}
+
+func (self *XEth) Block(hash []byte) *types.Block {
+	return self.chainManager.GetBlock(hash)
+}
+
+func (self *XEth) Storage(addr, storageAddr []byte) *ethutil.Value {
+	return self.World().safeGet(addr).GetStorage(ethutil.BigD(storageAddr))
+}
+
+func (self *XEth) Exists(addr []byte) bool {
+	return self.World().Get(addr) != nil
+}
+
+// Converts the given private key to an address
+func (self *XEth) ToAddress(priv []byte) []byte {
+	pair, err := crypto.NewKeyPairFromSec(priv)
+	if err != nil {
+		return nil
+	}
+
+	return pair.Address()
+}
+
+/*
+ * Execution helpers
+ */
+func (self *XEth) Execute(addr []byte, data []byte, value, gas, price *ethutil.Value) ([]byte, error) {
+	return self.ExecuteObject(&Object{self.World().safeGet(addr)}, data, value, gas, price)
+}
+
+func (self *XEth) ExecuteObject(object *Object, data []byte, value, gas, price *ethutil.Value) ([]byte, error) {
+	var (
+		initiator = state.NewStateObject(self.obj.KeyManager().KeyPair().Address())
+		block     = self.chainManager.CurrentBlock()
+	)
+
+	self.Vm.State = self.World().State().Copy()
+
+	vmenv := NewEnv(self.Vm.State, block, value.BigInt(), initiator.Address())
+	return vmenv.Call(initiator, object.Address(), data, gas.BigInt(), price.BigInt(), value.BigInt())
+}
+
+/*
+ * Transactional methods
+ */
+func (self *XEth) TransactString(key *crypto.KeyPair, rec string, value, gas, price *ethutil.Value, data []byte) (*types.Transaction, error) {
+	// Check if an address is stored by this address
+	var hash []byte
+	addr := self.World().Config().Get("NameReg").StorageString(rec).Bytes()
+	if len(addr) > 0 {
+		hash = addr
+	} else if ethutil.IsHex(rec) {
+		hash = ethutil.Hex2Bytes(rec[2:])
+	} else {
+		hash = ethutil.Hex2Bytes(rec)
+	}
+
+	return self.Transact(key, hash, value, gas, price, data)
+}
+
+func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *ethutil.Value, data []byte) (*types.Transaction, error) {
+	var hash []byte
+	var contractCreation bool
+	if types.IsContractAddr(to) {
+		contractCreation = true
+	} else {
+		// Check if an address is stored by this address
+		addr := self.World().Config().Get("NameReg").Storage(to).Bytes()
+		if len(addr) > 0 {
+			hash = addr
+		} else {
+			hash = to
+		}
+	}
+
+	var tx *types.Transaction
+	if contractCreation {
+		tx = types.NewContractCreationTx(value.BigInt(), gas.BigInt(), price.BigInt(), data)
+	} else {
+		tx = types.NewTransactionMessage(hash, value.BigInt(), gas.BigInt(), price.BigInt(), data)
+	}
+
+	state := self.chainManager.TransState()
+	nonce := state.GetNonce(key.Address())
+
+	tx.SetNonce(nonce)
+	tx.Sign(key.PrivateKey)
+
+	// Do some pre processing for our "pre" events  and hooks
+	block := self.chainManager.NewBlock(key.Address())
+	coinbase := state.GetStateObject(key.Address())
+	coinbase.SetGasPool(block.GasLimit)
+	self.blockManager.ApplyTransactions(coinbase, state, block, types.Transactions{tx}, true)
+
+	err := self.obj.TxPool().Add(tx)
+	if err != nil {
+		return nil, err
+	}
+	state.SetNonce(key.Address(), nonce+1)
+
+	if contractCreation {
+		addr := core.AddressFromMessage(tx)
+		pipelogger.Infof("Contract addr %x\n", addr)
+	}
+
+	return tx, nil
+}
+
+func (self *XEth) PushTx(tx *types.Transaction) ([]byte, error) {
+	err := self.obj.TxPool().Add(tx)
+	if err != nil {
+		return nil, err
+	}
+
+	if tx.To() == nil {
+		addr := core.AddressFromMessage(tx)
+		pipelogger.Infof("Contract addr %x\n", addr)
+		return addr, nil
+	}
+	return tx.Hash(), nil
+}
+
+func (self *XEth) CompileMutan(code string) ([]byte, error) {
+	data, err := ethutil.Compile(code, false)
+	if err != nil {
+		return nil, err
+	}
+
+	return data, nil
+}
diff --git a/xeth/vm_env.go b/xeth/vm_env.go
new file mode 100644
index 0000000000000000000000000000000000000000..7fb674a94b94ac4f89e1de91a459588a52d5f4bb
--- /dev/null
+++ b/xeth/vm_env.go
@@ -0,0 +1,65 @@
+package xeth
+
+import (
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/state"
+	"github.com/ethereum/go-ethereum/vm"
+)
+
+type VMEnv struct {
+	state  *state.StateDB
+	block  *types.Block
+	value  *big.Int
+	sender []byte
+
+	depth int
+}
+
+func NewEnv(state *state.StateDB, block *types.Block, value *big.Int, sender []byte) *VMEnv {
+	return &VMEnv{
+		state:  state,
+		block:  block,
+		value:  value,
+		sender: sender,
+	}
+}
+
+func (self *VMEnv) Origin() []byte        { return self.sender }
+func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number }
+func (self *VMEnv) PrevHash() []byte      { return self.block.PrevHash }
+func (self *VMEnv) Coinbase() []byte      { return self.block.Coinbase }
+func (self *VMEnv) Time() int64           { return self.block.Time }
+func (self *VMEnv) Difficulty() *big.Int  { return self.block.Difficulty }
+func (self *VMEnv) BlockHash() []byte     { return self.block.Hash() }
+func (self *VMEnv) Value() *big.Int       { return self.value }
+func (self *VMEnv) State() *state.StateDB { return self.state }
+func (self *VMEnv) GasLimit() *big.Int    { return self.block.GasLimit }
+func (self *VMEnv) Depth() int            { return self.depth }
+func (self *VMEnv) SetDepth(i int)        { self.depth = i }
+func (self *VMEnv) AddLog(log state.Log) {
+	self.state.AddLog(log)
+}
+func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error {
+	return vm.Transfer(from, to, amount)
+}
+
+func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution {
+	return core.NewExecution(self, addr, data, gas, price, value)
+}
+
+func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Call(addr, me)
+}
+func (self *VMEnv) CallCode(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {
+	exe := self.vm(me.Address(), data, gas, price, value)
+	return exe.Call(addr, me)
+}
+
+func (self *VMEnv) Create(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) {
+	exe := self.vm(addr, data, gas, price, value)
+	return exe.Create(me)
+}
diff --git a/xeth/world.go b/xeth/world.go
new file mode 100644
index 0000000000000000000000000000000000000000..956ef1e15fbd6f69230e7aecbe81a0f0f094a572
--- /dev/null
+++ b/xeth/world.go
@@ -0,0 +1,64 @@
+package xeth
+
+import (
+	"container/list"
+
+	"github.com/ethereum/go-ethereum/state"
+)
+
+type World struct {
+	pipe *XEth
+	cfg  *Config
+}
+
+func NewWorld(pipe *XEth) *World {
+	world := &World{pipe, nil}
+	world.cfg = &Config{pipe}
+
+	return world
+}
+
+func (self *XEth) World() *World {
+	return self.world
+}
+
+func (self *World) State() *state.StateDB {
+	return self.pipe.chainManager.State()
+}
+
+func (self *World) Get(addr []byte) *Object {
+	return &Object{self.State().GetStateObject(addr)}
+}
+
+func (self *World) SafeGet(addr []byte) *Object {
+	return &Object{self.safeGet(addr)}
+}
+
+func (self *World) safeGet(addr []byte) *state.StateObject {
+	object := self.State().GetStateObject(addr)
+	if object == nil {
+		object = state.NewStateObject(addr)
+	}
+
+	return object
+}
+
+func (self *World) Coinbase() *state.StateObject {
+	return nil
+}
+
+func (self *World) IsMining() bool {
+	return self.pipe.obj.IsMining()
+}
+
+func (self *World) IsListening() bool {
+	return self.pipe.obj.IsListening()
+}
+
+func (self *World) Peers() *list.List {
+	return self.pipe.obj.Peers()
+}
+
+func (self *World) Config() *Config {
+	return self.cfg
+}