From 69d8ab8bdd3b027f4e5e342ffa25506da05492a8 Mon Sep 17 00:00:00 2001 From: Talha Cross <47772477+soc1c@users.noreply.github.com> Date: Mon, 21 Oct 2019 11:18:49 +0200 Subject: [PATCH] Stable 6.0.10 backports (#59) * updated TestParseNode to work with go v1.12.8 (#42) * Closes #46 update mainnet bootnodes list (#45) * Windows build fix and makefile update (#48) * Makefile: allow building windows binaries * circleci/config: add windows build and release steps * Makefile: allow building macos binaries * circleci/config: add darwin build and release steps * Fixed for windows * Remove default env variable and update chainconfig * Fix circliCI build * Added back platform specific building assume will be needed for release binary gen * Updated CI to use mac build * Remove cross compiling from CI workflow, refactored makefile * Changed binary compression to zip for windows * ecrecover edge case chains fix (#58) * Added edge case test and refactored logic * Wip specific tests still failing * Update invalid tests to use actual invalid chainid @austinabell made this change --- .circleci/config.yml | 136 ++++++++++- Makefile | 82 ++++++- core/assets/assets.go | 360 ++++++++++++++++++----------- core/config/mainnet_bootnodes.json | 22 +- core/defaults_test.go | 4 +- core/types/transaction_signing.go | 8 +- core/vm/contracts.go | 8 +- core/vm/contracts_test.go | 30 +++ crypto/crypto.go | 2 +- crypto/crypto_test.go | 34 +-- go.mod | 4 +- go.sum | 12 + p2p/discover/node_test.go | 2 +- rpc/ipc_windows.go | 2 +- 14 files changed, 515 insertions(+), 191 deletions(-) create mode 100644 core/vm/contracts_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 79fe377e..34976bfa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,6 +16,38 @@ jobs: key: go-mod-v4-{{ checksum "go.sum" }} paths: - "/go/pkg/mod" + build-darwin-go-1.12: + working_directory: ~/go-ethereum + docker: + - image: circleci/golang:1.12 + steps: + - checkout + - restore_cache: + keys: + - go-mod-v4-{{ checksum "go.sum" }} + - run: + name: Compile Binaries + command: make mac/build + - save_cache: + key: go-mod-v4-{{ checksum "go.sum" }} + paths: + - "/go/pkg/mod" + build-windows-go-1.12: + working_directory: ~/go-ethereum + docker: + - image: circleci/golang:1.12 + steps: + - checkout + - restore_cache: + keys: + - go-mod-v4-{{ checksum "go.sum" }} + - run: + name: Compile Binaries + command: make win/build + - save_cache: + key: go-mod-v4-{{ checksum "go.sum" }} + paths: + - "/go/pkg/mod" tests-linux-go-1.12: working_directory: ~/go-ethereum docker: @@ -46,7 +78,7 @@ jobs: - go-mod-v4-{{ checksum "go.sum" }} - run: name: Compile Binaries - command: make build + command: make lin/build - run: name: Release Artifacts command: | @@ -73,6 +105,82 @@ jobs: key: go-mod-v4-{{ checksum "go.sum" }} paths: - "/go/pkg/mod" + release-darwin-go-1.12: + working_directory: ~/go-ethereum + docker: + - image: circleci/golang:1.12 + steps: + - checkout + - restore_cache: + keys: + - go-mod-v4-{{ checksum "go.sum" }} + - run: + name: Compile Binaries + command: make mac/build + - run: + name: Release Binaries + command: | + pushd ./bin/ + sha256sum ./abigen > ./abigen.sha256 + sha256sum ./bootnode > ./bootnode.sha256 + sha256sum ./disasm > ./disasm.sha256 + sha256sum ./ethtest > ./ethtest.sha256 + sha256sum ./evm > ./evm.sha256 + sha256sum ./geth > ./geth.sha256 + sha256sum ./rlpdump > ./rlpdump.sha256 + popd + mkdir ./artifacts/ + cp -rv ./bin ./geth-classic-${VERSION}-darwin + tar -zcvf geth-classic-${VERSION}-darwin.tar.gz geth-classic-${VERSION}-darwin + cp -v ./geth-classic-${VERSION}-darwin.tar.gz ./artifacts/ + pushd ./artifacts + sha256sum ./geth-classic-${VERSION}-darwin.tar.gz > ./geth-classic-${VERSION}-darwin.sha256 + popd + - store_artifacts: + path: ~/go-ethereum/artifacts + - save_cache: + key: go-mod-v4-{{ checksum "go.sum" }} + paths: + - "/go/pkg/mod" + release-windows-go-1.12: + working_directory: ~/go-ethereum + docker: + - image: circleci/golang:1.12 + steps: + - checkout + - restore_cache: + keys: + - go-mod-v4-{{ checksum "go.sum" }} + - run: + name: Compile Binaries + command: make win/build + - run: + name: Release Artifacts + command: | + pushd ./bin/ + sha256sum ./abigen.exe > ./abigen.exe.sha256 + sha256sum ./bootnode.exe > ./bootnode.exe.sha256 + sha256sum ./disasm.exe > ./disasm.exe.sha256 + sha256sum ./ethtest.exe > ./ethtest.exe.sha256 + sha256sum ./evm.exe > ./evm.exe.sha256 + sha256sum ./geth.exe > ./geth.exe.sha256 + sha256sum ./rlpdump.exe > ./rlpdump.exe.sha256 + popd + mkdir ./artifacts/ + VERSION=$(bin/geth version | grep -i version | head -n1 | awk '{print $2}') + rm ./bin/geth + cp -rv ./bin ./geth-classic-${VERSION}-windows + zip geth-classic-${VERSION}-windows.zip geth-classic-${VERSION}-windows + cp -v ./geth-classic-${VERSION}-windows.zip ./artifacts/ + pushd ./artifacts + sha256sum ./geth-classic-${VERSION}-windows.zip > ./geth-classic-${VERSION}-windows.sha256 + popd + - store_artifacts: + path: ~/go-ethereum/artifacts + - save_cache: + key: go-mod-v4-{{ checksum "go.sum" }} + paths: + - "/go/pkg/mod" workflows: version: 2 @@ -82,6 +190,14 @@ workflows: filters: tags: only: /.*/ + # - build-darwin-go-1.12: + # filters: + # tags: + # only: /.*/ + # - build-windows-go-1.12: + # filters: + # tags: + # only: /.*/ - tests-linux-go-1.12: requires: - build-linux-go-1.12 @@ -96,3 +212,21 @@ workflows: only: /^v.*/ branches: ignore: /.*/ + # - release-darwin-go-1.12: + # requires: + # - build-darwin-go-1.12 + # - tests-linux-go-1.12 + # filters: + # tags: + # only: /^v.*/ + # branches: + # ignore: /.*/ + # - release-windows-go-1.12: + # requires: + # - build-windows-go-1.12 + # - tests-linux-go-1.12 + # filters: + # tags: + # only: /^v.*/ + # branches: + # ignore: /.*/ diff --git a/Makefile b/Makefile index bb31c939..7bc1f467 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,14 @@ TEST_PATTERN?=. TEST_OPTIONS?=-race GO_MOD=GO111MODULE=on +LINFLAGS=GOOS=linux GOARCH=amd64 +WINFLAGS=GOOS=windows GOARCH=amd64 +MACFLAGS=GOOS=darwin GOARCH=amd64 LDFLAGS=-ldflags "-X main.Version="`git describe --tags` +SETMACFLAGS=$(eval BUILDFLAGS=${MACFLAGS}) +SETLINFLAGS=$(eval BUILDFLAGS=${LINFLAGS}) + BINARY=bin BUILD_TIME=`date +%FT%T%z` COMMIT=`git log --pretty=format:'%h' -n 1` @@ -18,54 +24,108 @@ export GOPATH?=${HOME}/go build: cmd/abigen cmd/bootnode cmd/disasm cmd/ethtest cmd/evm cmd/gethrpctest cmd/rlpdump cmd/geth ## Build a local snapshot binary version of all commands @ls -ld $(BINARY)/* +mac/build: macflags build + +lin/build: linflags build + +macflags: + ${SETMACFLAGS} + +linflags: + ${SETLINFLAGS} + +win/build: win/abigen win/bootnode win/disasm win/ethtest win/evm win/gethrpctest win/rlpdump win/geth ## Build a local snapshot binary version of all commands + @ls -ld $(BINARY)/* + cmd/geth: chainconfig ## Build a local snapshot binary version of geth. mkdir -p ./${BINARY} - ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/geth -tags="netgo" ./cmd/geth + ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/geth -tags="netgo" ./cmd/geth @echo "Done building geth." @echo "Run \"$(BINARY)/geth\" to launch geth." cmd/abigen: ## Build a local snapshot binary version of abigen. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/abigen ./cmd/abigen + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/abigen ./cmd/abigen @echo "Done building abigen." @echo "Run \"$(BINARY)/abigen\" to launch abigen." cmd/bootnode: ## Build a local snapshot of bootnode. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/bootnode ./cmd/bootnode + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/bootnode ./cmd/bootnode @echo "Done building bootnode." @echo "Run \"$(BINARY)/bootnode\" to launch bootnode." cmd/disasm: ## Build a local snapshot of disasm. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/disasm ./cmd/disasm + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/disasm ./cmd/disasm @echo "Done building disasm." @echo "Run \"$(BINARY)/disasm\" to launch disasm." cmd/ethtest: ## Build a local snapshot of ethtest. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/ethtest ./cmd/ethtest + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/ethtest ./cmd/ethtest @echo "Done building ethtest." @echo "Run \"$(BINARY)/ethtest\" to launch ethtest." cmd/evm: ## Build a local snapshot of evm. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/evm ./cmd/evm + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/evm ./cmd/evm @echo "Done building evm." @echo "Run \"$(BINARY)/evm\" to launch evm." cmd/gethrpctest: ## Build a local snapshot of gethrpctest. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/gethrpctest ./cmd/gethrpctest + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/gethrpctest ./cmd/gethrpctest @echo "Done building gethrpctest." @echo "Run \"$(BINARY)/gethrpctest\" to launch gethrpctest." cmd/rlpdump: ## Build a local snapshot of rlpdump. - mkdir -p ./${BINARY} && ${GO_MOD} go build ${LDFLAGS} -o ${BINARY}/rlpdump ./cmd/rlpdump + mkdir -p ./${BINARY} && ${GO_MOD} ${BUILDFLAGS} go build ${LDFLAGS} -o ${BINARY}/rlpdump ./cmd/rlpdump + @echo "Done building rlpdump." + @echo "Run \"$(BINARY)/rlpdump\" to launch rlpdump." + +win/geth: ## Build a local snapshot binary version of geth. + mkdir -p ./${BINARY} + ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/geth.exe -tags="netgo" ./cmd/geth + @echo "Done building geth." + @echo "Run \"$(BINARY)/geth\" to launch geth." + +win/abigen: ## Build a local snapshot binary version of abigen. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/abigen.exe ./cmd/abigen + @echo "Done building abigen." + @echo "Run \"$(BINARY)/abigen\" to launch abigen." + +win/bootnode: ## Build a local snapshot of bootnode. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/bootnode.exe ./cmd/bootnode + @echo "Done building bootnode." + @echo "Run \"$(BINARY)/bootnode\" to launch bootnode." + +win/disasm: ## Build a local snapshot of disasm. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/disasm.exe ./cmd/disasm + @echo "Done building disasm." + @echo "Run \"$(BINARY)/disasm\" to launch disasm." + +win/ethtest: ## Build a local snapshot of ethtest. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/ethtest.exe ./cmd/ethtest + @echo "Done building ethtest." + @echo "Run \"$(BINARY)/ethtest\" to launch ethtest." + +win/evm: ## Build a local snapshot of evm. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/evm.exe ./cmd/evm + @echo "Done building evm." + @echo "Run \"$(BINARY)/evm\" to launch evm." + +win/gethrpctest: ## Build a local snapshot of gethrpctest. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/gethrpctest.exe ./cmd/gethrpctest + @echo "Done building gethrpctest." + @echo "Run \"$(BINARY)/gethrpctest\" to launch gethrpctest." + +win/rlpdump: ## Build a local snapshot of rlpdump. + mkdir -p ./${BINARY} && ${GO_MOD} ${WINFLAGS} go build ${LDFLAGS} -o ${BINARY}/rlpdump.exe ./cmd/rlpdump @echo "Done building rlpdump." @echo "Run \"$(BINARY)/rlpdump\" to launch rlpdump." install: ## Install all packages to $GOPATH/bin - ${GO_MOD} go install ./cmd/{abigen,bootnode,disasm,ethtest,evm,gethrpctest,rlpdump} + ${GO_MOD} ${BUILDFLAGS} go install ./cmd/{abigen,bootnode,disasm,ethtest,evm,gethrpctest,rlpdump} $(MAKE) install_geth install_geth: chainconfig ## Install geth to $GOPATH/bin $(info Installing $$GOPATH/bin/geth) - ${GO_MOD} go install ${LDFLAGS} -tags="netgo" ./cmd/geth + ${GO_MOD} ${BUILDFLAGS} go install ${LDFLAGS} -tags="netgo" ./cmd/geth fmt: ## gofmt and goimports all go files find . -name '*.go' -not -wholename './vendor/*' -not -wholename './_vendor*' | while read -r file; do gofmt -w -s "$$file"; goimports -w "$$file"; done @@ -119,4 +179,4 @@ help: @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -.PHONY: setup test cover fmt lint ci build cmd/geth cmd/abigen cmd/bootnode cmd/disasm cmd/ethtest cmd/evm cmd/gethrlptest cmd/rlpdump install install_geth clean help static +.PHONY: setup test cover fmt lint ci build mac/build lin/build macflags linflags cmd/geth cmd/abigen cmd/bootnode cmd/disasm cmd/ethtest cmd/evm cmd/gethrlptest cmd/rlpdump install install_geth clean help static \ No newline at end of file diff --git a/core/assets/assets.go b/core/assets/assets.go index c0735167..a907d0a0 100644 --- a/core/assets/assets.go +++ b/core/assets/assets.go @@ -472,151 +472,235 @@ func init() { 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, - 0x2f, 0x2f, 0x65, 0x38, 0x30, 0x39, 0x63, 0x34, 0x61, 0x32, 0x66, 0x65, - 0x63, 0x37, 0x64, 0x61, 0x65, 0x64, 0x34, 0x30, 0x30, 0x65, 0x35, 0x65, - 0x32, 0x38, 0x35, 0x36, 0x34, 0x65, 0x32, 0x33, 0x36, 0x39, 0x33, 0x62, - 0x32, 0x33, 0x62, 0x32, 0x63, 0x63, 0x35, 0x61, 0x30, 0x31, 0x39, 0x62, - 0x36, 0x31, 0x32, 0x35, 0x30, 0x35, 0x36, 0x33, 0x31, 0x62, 0x62, 0x65, - 0x37, 0x62, 0x39, 0x63, 0x63, 0x66, 0x37, 0x30, 0x39, 0x63, 0x31, 0x37, - 0x39, 0x36, 0x64, 0x32, 0x61, 0x33, 0x64, 0x32, 0x39, 0x65, 0x66, 0x32, - 0x62, 0x30, 0x34, 0x35, 0x66, 0x32, 0x31, 0x30, 0x63, 0x61, 0x66, 0x35, - 0x31, 0x65, 0x33, 0x63, 0x34, 0x66, 0x35, 0x62, 0x36, 0x64, 0x33, 0x35, - 0x38, 0x37, 0x64, 0x34, 0x33, 0x61, 0x64, 0x35, 0x64, 0x36, 0x33, 0x39, - 0x37, 0x35, 0x32, 0x36, 0x66, 0x61, 0x36, 0x31, 0x37, 0x39, 0x40, 0x31, - 0x37, 0x34, 0x2e, 0x31, 0x31, 0x32, 0x2e, 0x33, 0x32, 0x2e, 0x31, 0x35, - 0x37, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x2f, 0x2f, 0x31, 0x35, 0x38, 0x61, 0x63, 0x35, 0x61, 0x34, 0x38, 0x31, + 0x37, 0x32, 0x36, 0x35, 0x64, 0x30, 0x64, 0x38, 0x62, 0x39, 0x37, 0x37, + 0x36, 0x36, 0x30, 0x62, 0x33, 0x64, 0x62, 0x65, 0x39, 0x61, 0x62, 0x65, + 0x65, 0x35, 0x36, 0x39, 0x34, 0x65, 0x64, 0x32, 0x31, 0x32, 0x66, 0x37, + 0x30, 0x39, 0x31, 0x63, 0x62, 0x66, 0x37, 0x38, 0x34, 0x64, 0x64, 0x66, + 0x34, 0x37, 0x36, 0x32, 0x33, 0x65, 0x64, 0x30, 0x31, 0x35, 0x65, 0x31, + 0x63, 0x62, 0x35, 0x34, 0x35, 0x39, 0x34, 0x64, 0x31, 0x30, 0x63, 0x31, + 0x63, 0x34, 0x36, 0x31, 0x31, 0x38, 0x37, 0x34, 0x37, 0x64, 0x64, 0x61, + 0x62, 0x65, 0x38, 0x36, 0x65, 0x62, 0x66, 0x35, 0x36, 0x39, 0x63, 0x66, + 0x32, 0x34, 0x61, 0x65, 0x39, 0x31, 0x66, 0x32, 0x64, 0x61, 0x61, 0x30, + 0x66, 0x31, 0x61, 0x64, 0x61, 0x61, 0x65, 0x33, 0x39, 0x30, 0x40, 0x31, + 0x35, 0x39, 0x2e, 0x32, 0x30, 0x33, 0x2e, 0x35, 0x36, 0x2e, 0x33, 0x33, + 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, + 0x2f, 0x2f, 0x65, 0x66, 0x64, 0x34, 0x38, 0x61, 0x64, 0x30, 0x38, 0x37, + 0x39, 0x65, 0x65, 0x62, 0x37, 0x66, 0x39, 0x63, 0x62, 0x35, 0x65, 0x35, + 0x30, 0x66, 0x33, 0x33, 0x66, 0x37, 0x62, 0x63, 0x32, 0x31, 0x65, 0x38, + 0x30, 0x35, 0x61, 0x37, 0x32, 0x65, 0x39, 0x30, 0x33, 0x36, 0x31, 0x66, + 0x31, 0x34, 0x35, 0x62, 0x61, 0x61, 0x61, 0x32, 0x32, 0x64, 0x64, 0x37, + 0x35, 0x64, 0x31, 0x31, 0x31, 0x65, 0x37, 0x63, 0x64, 0x39, 0x63, 0x39, + 0x33, 0x66, 0x31, 0x62, 0x37, 0x30, 0x36, 0x30, 0x64, 0x63, 0x62, 0x33, + 0x30, 0x61, 0x61, 0x31, 0x62, 0x33, 0x65, 0x36, 0x32, 0x30, 0x32, 0x36, + 0x39, 0x33, 0x33, 0x36, 0x64, 0x62, 0x66, 0x33, 0x32, 0x33, 0x33, 0x39, + 0x66, 0x65, 0x61, 0x34, 0x63, 0x31, 0x38, 0x39, 0x32, 0x35, 0x61, 0x34, + 0x63, 0x31, 0x35, 0x66, 0x65, 0x36, 0x34, 0x32, 0x64, 0x66, 0x40, 0x31, + 0x38, 0x2e, 0x32, 0x30, 0x35, 0x2e, 0x36, 0x36, 0x2e, 0x32, 0x32, 0x39, + 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, + 0x2f, 0x2f, 0x35, 0x66, 0x62, 0x66, 0x62, 0x34, 0x32, 0x36, 0x66, 0x62, + 0x62, 0x34, 0x36, 0x66, 0x38, 0x62, 0x38, 0x63, 0x31, 0x62, 0x64, 0x33, + 0x64, 0x64, 0x31, 0x34, 0x30, 0x66, 0x35, 0x62, 0x35, 0x31, 0x31, 0x64, + 0x61, 0x35, 0x35, 0x38, 0x63, 0x64, 0x33, 0x37, 0x64, 0x36, 0x30, 0x38, + 0x34, 0x34, 0x62, 0x35, 0x32, 0x35, 0x39, 0x30, 0x39, 0x61, 0x62, 0x38, + 0x32, 0x65, 0x31, 0x33, 0x61, 0x32, 0x35, 0x65, 0x65, 0x37, 0x32, 0x32, + 0x32, 0x39, 0x33, 0x63, 0x38, 0x32, 0x39, 0x65, 0x35, 0x32, 0x63, 0x62, + 0x36, 0x35, 0x63, 0x32, 0x33, 0x30, 0x35, 0x62, 0x31, 0x36, 0x33, 0x37, + 0x66, 0x61, 0x39, 0x61, 0x32, 0x65, 0x61, 0x34, 0x64, 0x36, 0x36, 0x33, + 0x34, 0x61, 0x32, 0x32, 0x34, 0x64, 0x35, 0x66, 0x34, 0x30, 0x30, 0x62, + 0x66, 0x65, 0x32, 0x34, 0x34, 0x61, 0x63, 0x30, 0x64, 0x65, 0x40, 0x31, + 0x36, 0x32, 0x2e, 0x32, 0x34, 0x33, 0x2e, 0x35, 0x35, 0x2e, 0x34, 0x35, + 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, + 0x2f, 0x2f, 0x36, 0x64, 0x64, 0x33, 0x61, 0x63, 0x38, 0x31, 0x34, 0x37, + 0x66, 0x61, 0x38, 0x32, 0x65, 0x34, 0x36, 0x38, 0x33, 0x37, 0x65, 0x63, + 0x38, 0x63, 0x33, 0x32, 0x32, 0x33, 0x64, 0x36, 0x39, 0x61, 0x63, 0x32, + 0x34, 0x62, 0x63, 0x64, 0x62, 0x61, 0x62, 0x30, 0x34, 0x62, 0x30, 0x33, + 0x36, 0x61, 0x33, 0x37, 0x30, 0x35, 0x63, 0x31, 0x34, 0x66, 0x33, 0x61, + 0x30, 0x32, 0x65, 0x39, 0x36, 0x38, 0x66, 0x37, 0x66, 0x31, 0x61, 0x64, + 0x66, 0x63, 0x64, 0x62, 0x30, 0x30, 0x32, 0x61, 0x61, 0x63, 0x65, 0x63, + 0x32, 0x64, 0x62, 0x34, 0x36, 0x65, 0x36, 0x32, 0x35, 0x63, 0x30, 0x34, + 0x62, 0x66, 0x38, 0x62, 0x35, 0x61, 0x31, 0x66, 0x38, 0x35, 0x62, 0x62, + 0x32, 0x64, 0x34, 0x30, 0x61, 0x34, 0x37, 0x39, 0x62, 0x33, 0x63, 0x63, + 0x39, 0x64, 0x34, 0x35, 0x61, 0x34, 0x34, 0x34, 0x61, 0x66, 0x40, 0x31, + 0x30, 0x34, 0x2e, 0x32, 0x33, 0x37, 0x2e, 0x31, 0x33, 0x31, 0x2e, 0x31, + 0x30, 0x32, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x62, 0x39, 0x65, 0x38, 0x39, 0x33, 0x65, 0x61, + 0x39, 0x63, 0x62, 0x34, 0x35, 0x33, 0x37, 0x66, 0x34, 0x66, 0x65, 0x64, + 0x31, 0x35, 0x34, 0x32, 0x33, 0x33, 0x30, 0x30, 0x35, 0x61, 0x65, 0x36, + 0x31, 0x62, 0x34, 0x34, 0x31, 0x63, 0x64, 0x30, 0x65, 0x63, 0x64, 0x39, + 0x38, 0x30, 0x31, 0x33, 0x36, 0x31, 0x33, 0x38, 0x63, 0x33, 0x30, 0x34, + 0x66, 0x65, 0x66, 0x61, 0x63, 0x31, 0x39, 0x34, 0x63, 0x32, 0x35, 0x61, + 0x31, 0x36, 0x62, 0x37, 0x33, 0x64, 0x61, 0x63, 0x30, 0x35, 0x66, 0x63, + 0x36, 0x36, 0x61, 0x34, 0x31, 0x39, 0x38, 0x64, 0x30, 0x63, 0x31, 0x35, + 0x64, 0x64, 0x30, 0x66, 0x33, 0x33, 0x61, 0x66, 0x39, 0x39, 0x62, 0x34, + 0x31, 0x31, 0x38, 0x38, 0x32, 0x63, 0x36, 0x38, 0x61, 0x30, 0x31, 0x39, + 0x64, 0x66, 0x61, 0x36, 0x62, 0x62, 0x37, 0x30, 0x33, 0x62, 0x39, 0x64, + 0x40, 0x31, 0x38, 0x2e, 0x31, 0x33, 0x30, 0x2e, 0x39, 0x33, 0x2e, 0x36, + 0x36, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, - 0x3a, 0x2f, 0x2f, 0x36, 0x65, 0x35, 0x33, 0x38, 0x65, 0x37, 0x63, 0x31, - 0x32, 0x38, 0x30, 0x66, 0x30, 0x61, 0x33, 0x31, 0x66, 0x66, 0x30, 0x38, - 0x62, 0x33, 0x38, 0x32, 0x64, 0x62, 0x35, 0x33, 0x30, 0x32, 0x34, 0x38, - 0x30, 0x66, 0x37, 0x37, 0x35, 0x34, 0x38, 0x30, 0x62, 0x38, 0x65, 0x36, - 0x38, 0x66, 0x38, 0x66, 0x65, 0x62, 0x63, 0x61, 0x30, 0x63, 0x65, 0x66, - 0x66, 0x38, 0x31, 0x65, 0x34, 0x62, 0x31, 0x39, 0x31, 0x35, 0x33, 0x63, - 0x36, 0x66, 0x38, 0x62, 0x66, 0x36, 0x30, 0x33, 0x31, 0x33, 0x62, 0x39, - 0x33, 0x62, 0x65, 0x66, 0x32, 0x63, 0x63, 0x33, 0x34, 0x64, 0x33, 0x34, - 0x65, 0x31, 0x64, 0x66, 0x34, 0x31, 0x33, 0x31, 0x37, 0x64, 0x65, 0x30, - 0x63, 0x65, 0x36, 0x31, 0x33, 0x61, 0x32, 0x30, 0x31, 0x64, 0x31, 0x36, - 0x36, 0x30, 0x61, 0x37, 0x38, 0x38, 0x61, 0x30, 0x33, 0x65, 0x32, 0x40, - 0x35, 0x32, 0x2e, 0x32, 0x30, 0x36, 0x2e, 0x36, 0x37, 0x2e, 0x32, 0x33, + 0x3a, 0x2f, 0x2f, 0x33, 0x66, 0x65, 0x39, 0x37, 0x30, 0x35, 0x61, 0x30, + 0x32, 0x34, 0x38, 0x37, 0x62, 0x61, 0x65, 0x61, 0x34, 0x35, 0x63, 0x31, + 0x66, 0x66, 0x65, 0x62, 0x66, 0x61, 0x34, 0x64, 0x38, 0x34, 0x38, 0x31, + 0x39, 0x66, 0x35, 0x66, 0x31, 0x65, 0x36, 0x38, 0x61, 0x30, 0x64, 0x62, + 0x63, 0x31, 0x38, 0x30, 0x33, 0x31, 0x35, 0x35, 0x33, 0x32, 0x34, 0x32, + 0x61, 0x36, 0x61, 0x30, 0x38, 0x65, 0x33, 0x39, 0x34, 0x39, 0x39, 0x62, + 0x36, 0x31, 0x65, 0x33, 0x36, 0x31, 0x61, 0x35, 0x32, 0x63, 0x32, 0x61, + 0x39, 0x32, 0x66, 0x39, 0x35, 0x35, 0x33, 0x65, 0x66, 0x64, 0x36, 0x33, + 0x37, 0x36, 0x33, 0x66, 0x36, 0x66, 0x64, 0x64, 0x33, 0x34, 0x36, 0x39, + 0x32, 0x62, 0x65, 0x30, 0x64, 0x34, 0x62, 0x61, 0x36, 0x38, 0x32, 0x33, + 0x62, 0x62, 0x32, 0x66, 0x63, 0x33, 0x34, 0x36, 0x30, 0x30, 0x39, 0x40, + 0x31, 0x37, 0x38, 0x2e, 0x36, 0x32, 0x2e, 0x32, 0x33, 0x38, 0x2e, 0x37, 0x35, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, - 0x3a, 0x2f, 0x2f, 0x35, 0x66, 0x62, 0x66, 0x62, 0x34, 0x32, 0x36, 0x66, - 0x62, 0x62, 0x34, 0x36, 0x66, 0x38, 0x62, 0x38, 0x63, 0x31, 0x62, 0x64, - 0x33, 0x64, 0x64, 0x31, 0x34, 0x30, 0x66, 0x35, 0x62, 0x35, 0x31, 0x31, - 0x64, 0x61, 0x35, 0x35, 0x38, 0x63, 0x64, 0x33, 0x37, 0x64, 0x36, 0x30, - 0x38, 0x34, 0x34, 0x62, 0x35, 0x32, 0x35, 0x39, 0x30, 0x39, 0x61, 0x62, - 0x38, 0x32, 0x65, 0x31, 0x33, 0x61, 0x32, 0x35, 0x65, 0x65, 0x37, 0x32, - 0x32, 0x32, 0x39, 0x33, 0x63, 0x38, 0x32, 0x39, 0x65, 0x35, 0x32, 0x63, - 0x62, 0x36, 0x35, 0x63, 0x32, 0x33, 0x30, 0x35, 0x62, 0x31, 0x36, 0x33, - 0x37, 0x66, 0x61, 0x39, 0x61, 0x32, 0x65, 0x61, 0x34, 0x64, 0x36, 0x36, - 0x33, 0x34, 0x61, 0x32, 0x32, 0x34, 0x64, 0x35, 0x66, 0x34, 0x30, 0x30, - 0x62, 0x66, 0x65, 0x32, 0x34, 0x34, 0x61, 0x63, 0x30, 0x64, 0x65, 0x40, - 0x31, 0x36, 0x32, 0x2e, 0x32, 0x34, 0x33, 0x2e, 0x35, 0x35, 0x2e, 0x34, - 0x35, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, + 0x3a, 0x2f, 0x2f, 0x64, 0x35, 0x30, 0x66, 0x61, 0x63, 0x63, 0x36, 0x35, + 0x65, 0x34, 0x36, 0x62, 0x64, 0x61, 0x36, 0x66, 0x66, 0x35, 0x39, 0x34, + 0x62, 0x36, 0x65, 0x39, 0x35, 0x34, 0x39, 0x31, 0x65, 0x66, 0x61, 0x31, + 0x36, 0x65, 0x30, 0x36, 0x37, 0x64, 0x65, 0x34, 0x31, 0x61, 0x65, 0x39, + 0x36, 0x35, 0x37, 0x31, 0x64, 0x39, 0x66, 0x33, 0x63, 0x62, 0x38, 0x35, + 0x33, 0x64, 0x35, 0x33, 0x38, 0x63, 0x34, 0x34, 0x38, 0x36, 0x34, 0x34, + 0x39, 0x36, 0x66, 0x61, 0x35, 0x65, 0x34, 0x64, 0x66, 0x31, 0x30, 0x31, + 0x31, 0x35, 0x66, 0x30, 0x32, 0x62, 0x62, 0x62, 0x61, 0x66, 0x34, 0x37, + 0x38, 0x35, 0x33, 0x66, 0x39, 0x33, 0x32, 0x65, 0x31, 0x31, 0x30, 0x61, + 0x34, 0x34, 0x63, 0x38, 0x39, 0x32, 0x32, 0x37, 0x64, 0x61, 0x37, 0x63, + 0x33, 0x30, 0x65, 0x39, 0x36, 0x38, 0x34, 0x30, 0x35, 0x39, 0x36, 0x40, + 0x31, 0x38, 0x38, 0x2e, 0x31, 0x36, 0x36, 0x2e, 0x31, 0x36, 0x33, 0x2e, + 0x31, 0x38, 0x37, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, + 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x61, 0x30, 0x64, 0x35, 0x63, 0x35, 0x38, + 0x39, 0x64, 0x63, 0x30, 0x32, 0x64, 0x30, 0x30, 0x38, 0x66, 0x65, 0x34, + 0x32, 0x33, 0x37, 0x64, 0x61, 0x39, 0x38, 0x37, 0x37, 0x61, 0x35, 0x66, + 0x31, 0x64, 0x61, 0x65, 0x64, 0x65, 0x65, 0x30, 0x32, 0x32, 0x37, 0x61, + 0x62, 0x36, 0x31, 0x32, 0x36, 0x37, 0x37, 0x65, 0x61, 0x62, 0x65, 0x33, + 0x32, 0x33, 0x35, 0x32, 0x30, 0x66, 0x30, 0x30, 0x33, 0x65, 0x62, 0x35, + 0x65, 0x33, 0x31, 0x31, 0x61, 0x66, 0x33, 0x33, 0x35, 0x64, 0x65, 0x39, + 0x66, 0x37, 0x39, 0x36, 0x34, 0x63, 0x32, 0x30, 0x39, 0x32, 0x62, 0x62, + 0x63, 0x32, 0x62, 0x33, 0x62, 0x37, 0x61, 0x62, 0x31, 0x63, 0x63, 0x65, + 0x35, 0x61, 0x30, 0x37, 0x34, 0x64, 0x38, 0x33, 0x34, 0x36, 0x39, 0x35, + 0x39, 0x66, 0x30, 0x38, 0x36, 0x38, 0x62, 0x34, 0x65, 0x33, 0x36, 0x36, + 0x65, 0x40, 0x34, 0x36, 0x2e, 0x31, 0x30, 0x31, 0x2e, 0x37, 0x38, 0x2e, + 0x34, 0x34, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x63, 0x30, 0x37, 0x31, 0x64, 0x39, 0x36, 0x62, + 0x30, 0x63, 0x30, 0x66, 0x31, 0x33, 0x30, 0x30, 0x36, 0x66, 0x65, 0x61, + 0x65, 0x33, 0x39, 0x37, 0x37, 0x66, 0x62, 0x31, 0x62, 0x33, 0x63, 0x32, + 0x66, 0x36, 0x32, 0x63, 0x61, 0x65, 0x64, 0x66, 0x36, 0x34, 0x33, 0x64, + 0x66, 0x39, 0x61, 0x33, 0x36, 0x35, 0x35, 0x62, 0x63, 0x31, 0x62, 0x36, + 0x30, 0x66, 0x37, 0x37, 0x37, 0x66, 0x30, 0x35, 0x65, 0x36, 0x39, 0x61, + 0x34, 0x65, 0x35, 0x38, 0x62, 0x66, 0x33, 0x35, 0x34, 0x37, 0x62, 0x62, + 0x32, 0x39, 0x39, 0x32, 0x31, 0x30, 0x30, 0x39, 0x32, 0x37, 0x36, 0x34, + 0x63, 0x35, 0x36, 0x64, 0x66, 0x31, 0x65, 0x30, 0x38, 0x33, 0x38, 0x30, + 0x65, 0x39, 0x31, 0x32, 0x36, 0x35, 0x62, 0x61, 0x61, 0x38, 0x34, 0x35, + 0x64, 0x63, 0x61, 0x38, 0x62, 0x63, 0x30, 0x61, 0x37, 0x31, 0x64, 0x61, + 0x40, 0x36, 0x38, 0x2e, 0x31, 0x38, 0x33, 0x2e, 0x39, 0x39, 0x2e, 0x35, + 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, + 0x2f, 0x2f, 0x38, 0x33, 0x62, 0x33, 0x33, 0x34, 0x30, 0x39, 0x33, 0x34, + 0x39, 0x66, 0x66, 0x61, 0x32, 0x35, 0x65, 0x31, 0x35, 0x30, 0x35, 0x35, + 0x35, 0x66, 0x37, 0x62, 0x34, 0x66, 0x38, 0x64, 0x65, 0x65, 0x62, 0x63, + 0x36, 0x38, 0x66, 0x33, 0x64, 0x33, 0x34, 0x64, 0x37, 0x38, 0x32, 0x31, + 0x32, 0x39, 0x64, 0x63, 0x33, 0x63, 0x38, 0x62, 0x61, 0x30, 0x37, 0x62, + 0x38, 0x38, 0x30, 0x63, 0x32, 0x30, 0x39, 0x33, 0x31, 0x30, 0x61, 0x34, + 0x31, 0x39, 0x31, 0x65, 0x31, 0x37, 0x32, 0x35, 0x66, 0x32, 0x66, 0x36, + 0x62, 0x65, 0x66, 0x35, 0x39, 0x62, 0x63, 0x65, 0x39, 0x34, 0x35, 0x32, + 0x64, 0x38, 0x32, 0x31, 0x31, 0x31, 0x31, 0x65, 0x61, 0x61, 0x37, 0x38, + 0x36, 0x64, 0x65, 0x61, 0x62, 0x30, 0x38, 0x61, 0x37, 0x65, 0x36, 0x35, + 0x35, 0x31, 0x66, 0x63, 0x61, 0x34, 0x31, 0x66, 0x34, 0x66, 0x40, 0x32, + 0x30, 0x36, 0x2e, 0x31, 0x38, 0x39, 0x2e, 0x36, 0x38, 0x2e, 0x31, 0x39, + 0x31, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, 0x65, - 0x3a, 0x2f, 0x2f, 0x34, 0x32, 0x64, 0x38, 0x66, 0x32, 0x39, 0x64, 0x31, - 0x64, 0x62, 0x35, 0x66, 0x34, 0x62, 0x32, 0x39, 0x34, 0x37, 0x63, 0x64, - 0x35, 0x63, 0x33, 0x64, 0x37, 0x36, 0x63, 0x36, 0x64, 0x30, 0x64, 0x33, - 0x36, 0x39, 0x37, 0x65, 0x36, 0x62, 0x39, 0x62, 0x33, 0x34, 0x33, 0x30, - 0x63, 0x33, 0x64, 0x34, 0x31, 0x65, 0x34, 0x36, 0x62, 0x34, 0x62, 0x62, - 0x37, 0x37, 0x36, 0x35, 0x35, 0x34, 0x33, 0x33, 0x61, 0x65, 0x65, 0x64, - 0x63, 0x32, 0x35, 0x64, 0x34, 0x62, 0x34, 0x65, 0x61, 0x39, 0x64, 0x38, - 0x32, 0x31, 0x34, 0x62, 0x36, 0x61, 0x34, 0x33, 0x30, 0x30, 0x38, 0x62, - 0x61, 0x36, 0x37, 0x31, 0x39, 0x39, 0x33, 0x37, 0x34, 0x61, 0x39, 0x62, - 0x35, 0x33, 0x36, 0x33, 0x33, 0x33, 0x30, 0x31, 0x62, 0x63, 0x61, 0x30, - 0x63, 0x64, 0x32, 0x30, 0x63, 0x36, 0x39, 0x32, 0x38, 0x61, 0x62, 0x40, - 0x31, 0x30, 0x34, 0x2e, 0x31, 0x35, 0x35, 0x2e, 0x31, 0x37, 0x36, 0x2e, - 0x31, 0x35, 0x31, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, + 0x3a, 0x2f, 0x2f, 0x30, 0x64, 0x61, 0x61, 0x65, 0x32, 0x61, 0x33, 0x30, + 0x66, 0x32, 0x63, 0x37, 0x33, 0x62, 0x30, 0x62, 0x32, 0x35, 0x37, 0x37, + 0x34, 0x36, 0x35, 0x38, 0x37, 0x31, 0x33, 0x36, 0x65, 0x66, 0x62, 0x38, + 0x65, 0x33, 0x34, 0x37, 0x39, 0x34, 0x39, 0x36, 0x66, 0x37, 0x65, 0x61, + 0x31, 0x65, 0x39, 0x34, 0x33, 0x65, 0x65, 0x62, 0x39, 0x61, 0x36, 0x36, + 0x33, 0x62, 0x37, 0x32, 0x64, 0x64, 0x30, 0x34, 0x35, 0x38, 0x32, 0x66, + 0x36, 0x39, 0x39, 0x66, 0x37, 0x30, 0x31, 0x30, 0x65, 0x65, 0x30, 0x32, + 0x63, 0x35, 0x37, 0x66, 0x63, 0x34, 0x35, 0x64, 0x31, 0x66, 0x30, 0x39, + 0x35, 0x36, 0x38, 0x63, 0x32, 0x30, 0x61, 0x39, 0x30, 0x35, 0x30, 0x66, + 0x66, 0x39, 0x33, 0x37, 0x66, 0x39, 0x31, 0x33, 0x39, 0x65, 0x32, 0x39, + 0x37, 0x33, 0x64, 0x64, 0x64, 0x39, 0x38, 0x62, 0x38, 0x37, 0x62, 0x40, + 0x31, 0x35, 0x39, 0x2e, 0x38, 0x39, 0x2e, 0x31, 0x36, 0x39, 0x2e, 0x31, + 0x30, 0x33, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x35, 0x30, 0x38, 0x30, 0x38, 0x34, 0x36, 0x31, + 0x64, 0x64, 0x37, 0x33, 0x62, 0x33, 0x64, 0x37, 0x30, 0x35, 0x33, 0x37, + 0x65, 0x34, 0x63, 0x31, 0x65, 0x35, 0x66, 0x61, 0x66, 0x64, 0x31, 0x31, + 0x33, 0x32, 0x62, 0x33, 0x61, 0x39, 0x30, 0x66, 0x39, 0x39, 0x38, 0x33, + 0x39, 0x39, 0x61, 0x66, 0x39, 0x32, 0x30, 0x35, 0x66, 0x38, 0x38, 0x38, + 0x39, 0x39, 0x38, 0x37, 0x64, 0x36, 0x32, 0x30, 0x39, 0x36, 0x64, 0x34, + 0x65, 0x38, 0x35, 0x33, 0x38, 0x31, 0x33, 0x35, 0x36, 0x32, 0x64, 0x64, + 0x34, 0x33, 0x65, 0x37, 0x32, 0x37, 0x30, 0x61, 0x37, 0x31, 0x63, 0x39, + 0x64, 0x39, 0x64, 0x34, 0x65, 0x34, 0x64, 0x64, 0x37, 0x33, 0x61, 0x35, + 0x33, 0x34, 0x66, 0x64, 0x62, 0x32, 0x32, 0x66, 0x62, 0x61, 0x63, 0x39, + 0x38, 0x63, 0x33, 0x38, 0x39, 0x63, 0x31, 0x61, 0x37, 0x33, 0x36, 0x32, + 0x40, 0x31, 0x37, 0x38, 0x2e, 0x31, 0x32, 0x38, 0x2e, 0x35, 0x35, 0x2e, + 0x31, 0x31, 0x39, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, - 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x38, 0x31, 0x34, 0x39, 0x32, 0x30, 0x66, - 0x31, 0x65, 0x63, 0x39, 0x35, 0x31, 0x30, 0x61, 0x61, 0x39, 0x65, 0x61, - 0x31, 0x63, 0x38, 0x66, 0x37, 0x39, 0x64, 0x38, 0x62, 0x36, 0x65, 0x36, - 0x61, 0x34, 0x36, 0x32, 0x30, 0x34, 0x35, 0x66, 0x30, 0x39, 0x63, 0x61, - 0x61, 0x32, 0x61, 0x65, 0x34, 0x30, 0x35, 0x35, 0x62, 0x30, 0x66, 0x33, - 0x34, 0x66, 0x37, 0x34, 0x31, 0x36, 0x66, 0x63, 0x61, 0x36, 0x66, 0x61, - 0x63, 0x64, 0x33, 0x64, 0x64, 0x34, 0x35, 0x66, 0x31, 0x63, 0x66, 0x31, - 0x36, 0x37, 0x33, 0x63, 0x30, 0x32, 0x30, 0x39, 0x65, 0x30, 0x35, 0x30, - 0x33, 0x66, 0x30, 0x32, 0x37, 0x37, 0x36, 0x62, 0x38, 0x66, 0x66, 0x39, - 0x34, 0x30, 0x32, 0x30, 0x65, 0x39, 0x38, 0x62, 0x36, 0x36, 0x37, 0x39, - 0x61, 0x30, 0x64, 0x63, 0x35, 0x36, 0x31, 0x62, 0x34, 0x65, 0x62, 0x61, - 0x30, 0x40, 0x31, 0x30, 0x34, 0x2e, 0x31, 0x35, 0x34, 0x2e, 0x31, 0x33, - 0x36, 0x2e, 0x31, 0x31, 0x37, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x37, 0x32, 0x65, 0x34, 0x34, - 0x35, 0x66, 0x34, 0x65, 0x38, 0x39, 0x63, 0x30, 0x66, 0x34, 0x37, 0x36, - 0x64, 0x34, 0x30, 0x34, 0x62, 0x63, 0x34, 0x30, 0x34, 0x37, 0x38, 0x62, - 0x30, 0x64, 0x66, 0x38, 0x33, 0x61, 0x35, 0x62, 0x35, 0x30, 0x30, 0x64, - 0x32, 0x64, 0x32, 0x65, 0x38, 0x35, 0x30, 0x65, 0x30, 0x38, 0x65, 0x62, - 0x31, 0x61, 0x66, 0x30, 0x63, 0x64, 0x34, 0x36, 0x34, 0x61, 0x62, 0x38, - 0x36, 0x64, 0x62, 0x36, 0x31, 0x36, 0x30, 0x64, 0x30, 0x66, 0x64, 0x65, - 0x36, 0x34, 0x62, 0x64, 0x37, 0x37, 0x64, 0x35, 0x66, 0x30, 0x64, 0x33, - 0x33, 0x35, 0x30, 0x37, 0x61, 0x65, 0x31, 0x39, 0x30, 0x33, 0x35, 0x36, - 0x37, 0x31, 0x62, 0x33, 0x63, 0x37, 0x34, 0x66, 0x65, 0x63, 0x31, 0x32, - 0x36, 0x64, 0x36, 0x65, 0x32, 0x38, 0x37, 0x38, 0x37, 0x36, 0x36, 0x39, - 0x37, 0x34, 0x30, 0x40, 0x31, 0x30, 0x34, 0x2e, 0x31, 0x39, 0x38, 0x2e, - 0x37, 0x31, 0x2e, 0x32, 0x30, 0x30, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x35, 0x63, 0x64, 0x32, - 0x31, 0x38, 0x39, 0x35, 0x39, 0x66, 0x38, 0x32, 0x36, 0x33, 0x62, 0x63, - 0x33, 0x37, 0x32, 0x31, 0x64, 0x37, 0x37, 0x38, 0x39, 0x30, 0x37, 0x30, - 0x38, 0x30, 0x36, 0x62, 0x30, 0x61, 0x64, 0x66, 0x66, 0x31, 0x61, 0x30, - 0x65, 0x64, 0x33, 0x66, 0x39, 0x35, 0x65, 0x63, 0x38, 0x38, 0x36, 0x66, - 0x62, 0x34, 0x36, 0x39, 0x66, 0x39, 0x33, 0x36, 0x32, 0x63, 0x37, 0x35, - 0x30, 0x37, 0x65, 0x33, 0x62, 0x33, 0x32, 0x62, 0x32, 0x35, 0x36, 0x35, - 0x35, 0x30, 0x62, 0x39, 0x61, 0x37, 0x39, 0x36, 0x34, 0x61, 0x32, 0x33, - 0x61, 0x39, 0x33, 0x38, 0x65, 0x38, 0x64, 0x34, 0x32, 0x64, 0x34, 0x35, - 0x61, 0x30, 0x63, 0x33, 0x34, 0x62, 0x33, 0x33, 0x32, 0x62, 0x66, 0x65, - 0x62, 0x63, 0x35, 0x34, 0x62, 0x32, 0x39, 0x30, 0x38, 0x31, 0x65, 0x38, - 0x33, 0x62, 0x39, 0x33, 0x40, 0x33, 0x35, 0x2e, 0x31, 0x38, 0x37, 0x2e, - 0x35, 0x37, 0x2e, 0x39, 0x34, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x33, 0x39, 0x61, 0x62, 0x61, - 0x62, 0x39, 0x64, 0x32, 0x61, 0x34, 0x31, 0x66, 0x35, 0x33, 0x32, 0x39, - 0x38, 0x63, 0x30, 0x63, 0x39, 0x64, 0x63, 0x36, 0x62, 0x62, 0x63, 0x61, - 0x35, 0x37, 0x62, 0x30, 0x38, 0x34, 0x30, 0x63, 0x33, 0x62, 0x61, 0x39, - 0x64, 0x63, 0x63, 0x66, 0x34, 0x32, 0x61, 0x61, 0x32, 0x37, 0x33, 0x31, - 0x36, 0x61, 0x64, 0x64, 0x63, 0x31, 0x62, 0x37, 0x65, 0x35, 0x36, 0x61, - 0x64, 0x65, 0x33, 0x32, 0x61, 0x30, 0x61, 0x39, 0x66, 0x37, 0x66, 0x35, - 0x32, 0x64, 0x36, 0x63, 0x35, 0x64, 0x62, 0x34, 0x66, 0x65, 0x37, 0x34, - 0x64, 0x38, 0x38, 0x32, 0x34, 0x62, 0x63, 0x65, 0x64, 0x66, 0x65, 0x61, - 0x65, 0x63, 0x66, 0x31, 0x61, 0x34, 0x65, 0x35, 0x33, 0x33, 0x63, 0x61, - 0x63, 0x62, 0x37, 0x31, 0x63, 0x66, 0x38, 0x31, 0x30, 0x30, 0x61, 0x39, - 0x34, 0x34, 0x32, 0x40, 0x31, 0x34, 0x34, 0x2e, 0x37, 0x36, 0x2e, 0x32, - 0x33, 0x38, 0x2e, 0x34, 0x39, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x66, 0x35, 0x30, 0x65, 0x36, - 0x37, 0x35, 0x61, 0x33, 0x34, 0x66, 0x34, 0x37, 0x31, 0x61, 0x66, 0x32, - 0x34, 0x33, 0x38, 0x62, 0x39, 0x32, 0x31, 0x39, 0x31, 0x34, 0x62, 0x35, - 0x66, 0x30, 0x36, 0x34, 0x39, 0x39, 0x63, 0x37, 0x34, 0x33, 0x38, 0x66, - 0x33, 0x31, 0x34, 0x36, 0x66, 0x36, 0x62, 0x38, 0x39, 0x33, 0x36, 0x66, - 0x31, 0x66, 0x61, 0x65, 0x62, 0x35, 0x30, 0x62, 0x38, 0x61, 0x39, 0x31, - 0x64, 0x30, 0x64, 0x30, 0x63, 0x32, 0x34, 0x66, 0x62, 0x30, 0x35, 0x61, - 0x36, 0x36, 0x66, 0x30, 0x35, 0x38, 0x36, 0x35, 0x63, 0x64, 0x35, 0x38, - 0x63, 0x32, 0x34, 0x64, 0x61, 0x33, 0x65, 0x36, 0x36, 0x34, 0x64, 0x30, - 0x64, 0x65, 0x66, 0x38, 0x30, 0x36, 0x31, 0x37, 0x32, 0x64, 0x64, 0x64, - 0x30, 0x64, 0x34, 0x63, 0x35, 0x62, 0x64, 0x62, 0x66, 0x33, 0x37, 0x37, - 0x34, 0x37, 0x65, 0x40, 0x31, 0x34, 0x34, 0x2e, 0x37, 0x36, 0x2e, 0x32, - 0x33, 0x38, 0x2e, 0x34, 0x39, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x36, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x6e, 0x6f, 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x36, 0x64, 0x64, 0x33, 0x61, - 0x63, 0x38, 0x31, 0x34, 0x37, 0x66, 0x61, 0x38, 0x32, 0x65, 0x34, 0x36, - 0x38, 0x33, 0x37, 0x65, 0x63, 0x38, 0x63, 0x33, 0x32, 0x32, 0x33, 0x64, - 0x36, 0x39, 0x61, 0x63, 0x32, 0x34, 0x62, 0x63, 0x64, 0x62, 0x61, 0x62, - 0x30, 0x34, 0x62, 0x30, 0x33, 0x36, 0x61, 0x33, 0x37, 0x30, 0x35, 0x63, - 0x31, 0x34, 0x66, 0x33, 0x61, 0x30, 0x32, 0x65, 0x39, 0x36, 0x38, 0x66, - 0x37, 0x66, 0x31, 0x61, 0x64, 0x66, 0x63, 0x64, 0x62, 0x30, 0x30, 0x32, - 0x61, 0x61, 0x63, 0x65, 0x63, 0x32, 0x64, 0x62, 0x34, 0x36, 0x65, 0x36, - 0x32, 0x35, 0x63, 0x30, 0x34, 0x62, 0x66, 0x38, 0x62, 0x35, 0x61, 0x31, - 0x66, 0x38, 0x35, 0x62, 0x62, 0x32, 0x64, 0x34, 0x30, 0x61, 0x34, 0x37, - 0x39, 0x62, 0x33, 0x63, 0x63, 0x39, 0x64, 0x34, 0x35, 0x61, 0x34, 0x34, - 0x34, 0x61, 0x66, 0x40, 0x31, 0x30, 0x34, 0x2e, 0x32, 0x33, 0x37, 0x2e, - 0x31, 0x33, 0x31, 0x2e, 0x31, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x33, 0x30, - 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x7d, 0x0a, + 0x64, 0x65, 0x3a, 0x2f, 0x2f, 0x35, 0x63, 0x64, 0x32, 0x31, 0x38, 0x39, + 0x35, 0x39, 0x66, 0x38, 0x32, 0x36, 0x33, 0x62, 0x63, 0x33, 0x37, 0x32, + 0x31, 0x64, 0x37, 0x37, 0x38, 0x39, 0x30, 0x37, 0x30, 0x38, 0x30, 0x36, + 0x62, 0x30, 0x61, 0x64, 0x66, 0x66, 0x31, 0x61, 0x30, 0x65, 0x64, 0x33, + 0x66, 0x39, 0x35, 0x65, 0x63, 0x38, 0x38, 0x36, 0x66, 0x62, 0x34, 0x36, + 0x39, 0x66, 0x39, 0x33, 0x36, 0x32, 0x63, 0x37, 0x35, 0x30, 0x37, 0x65, + 0x33, 0x62, 0x33, 0x32, 0x62, 0x32, 0x35, 0x36, 0x35, 0x35, 0x30, 0x62, + 0x39, 0x61, 0x37, 0x39, 0x36, 0x34, 0x61, 0x32, 0x33, 0x61, 0x39, 0x33, + 0x38, 0x65, 0x38, 0x64, 0x34, 0x32, 0x64, 0x34, 0x35, 0x61, 0x30, 0x63, + 0x33, 0x34, 0x62, 0x33, 0x33, 0x32, 0x62, 0x66, 0x65, 0x62, 0x63, 0x35, + 0x34, 0x62, 0x32, 0x39, 0x30, 0x38, 0x31, 0x65, 0x38, 0x33, 0x62, 0x39, + 0x33, 0x40, 0x33, 0x35, 0x2e, 0x31, 0x38, 0x37, 0x2e, 0x35, 0x37, 0x2e, + 0x39, 0x34, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x36, 0x36, 0x34, 0x39, 0x38, 0x61, 0x63, 0x39, + 0x33, 0x35, 0x66, 0x33, 0x66, 0x35, 0x34, 0x64, 0x38, 0x37, 0x33, 0x64, + 0x65, 0x34, 0x37, 0x31, 0x39, 0x62, 0x66, 0x32, 0x64, 0x36, 0x64, 0x36, + 0x31, 0x65, 0x30, 0x63, 0x37, 0x34, 0x64, 0x64, 0x31, 0x37, 0x33, 0x62, + 0x35, 0x34, 0x37, 0x35, 0x33, 0x31, 0x33, 0x32, 0x35, 0x62, 0x63, 0x65, + 0x66, 0x33, 0x33, 0x31, 0x34, 0x38, 0x30, 0x66, 0x39, 0x62, 0x65, 0x64, + 0x65, 0x63, 0x65, 0x39, 0x31, 0x30, 0x39, 0x39, 0x38, 0x31, 0x30, 0x39, + 0x37, 0x31, 0x63, 0x38, 0x35, 0x36, 0x37, 0x65, 0x65, 0x62, 0x31, 0x61, + 0x65, 0x39, 0x66, 0x36, 0x39, 0x35, 0x34, 0x62, 0x30, 0x31, 0x33, 0x63, + 0x34, 0x37, 0x63, 0x36, 0x64, 0x63, 0x35, 0x31, 0x33, 0x35, 0x35, 0x62, + 0x62, 0x62, 0x62, 0x61, 0x65, 0x36, 0x35, 0x61, 0x38, 0x63, 0x31, 0x36, + 0x40, 0x35, 0x34, 0x2e, 0x31, 0x34, 0x38, 0x2e, 0x31, 0x36, 0x35, 0x2e, + 0x31, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x2c, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x37, 0x33, 0x65, 0x37, 0x34, 0x63, 0x65, 0x37, + 0x34, 0x32, 0x36, 0x61, 0x31, 0x37, 0x61, 0x61, 0x32, 0x64, 0x38, 0x62, + 0x35, 0x62, 0x62, 0x36, 0x34, 0x64, 0x37, 0x39, 0x36, 0x65, 0x63, 0x37, + 0x64, 0x63, 0x34, 0x64, 0x63, 0x65, 0x65, 0x32, 0x61, 0x66, 0x39, 0x62, + 0x62, 0x64, 0x64, 0x34, 0x34, 0x33, 0x34, 0x33, 0x39, 0x34, 0x64, 0x31, + 0x65, 0x34, 0x65, 0x35, 0x32, 0x65, 0x36, 0x35, 0x30, 0x62, 0x39, 0x65, + 0x33, 0x39, 0x32, 0x30, 0x32, 0x34, 0x33, 0x35, 0x66, 0x63, 0x61, 0x32, + 0x39, 0x63, 0x65, 0x36, 0x35, 0x63, 0x32, 0x34, 0x32, 0x66, 0x64, 0x36, + 0x65, 0x35, 0x39, 0x62, 0x39, 0x33, 0x65, 0x64, 0x32, 0x63, 0x66, 0x33, + 0x37, 0x66, 0x30, 0x34, 0x62, 0x36, 0x34, 0x35, 0x66, 0x62, 0x32, 0x33, + 0x65, 0x33, 0x30, 0x36, 0x32, 0x37, 0x33, 0x38, 0x31, 0x36, 0x61, 0x64, + 0x40, 0x35, 0x34, 0x2e, 0x31, 0x34, 0x38, 0x2e, 0x31, 0x36, 0x35, 0x2e, + 0x31, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x34, 0x22, 0x2c, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x6e, 0x6f, 0x64, + 0x65, 0x3a, 0x2f, 0x2f, 0x38, 0x38, 0x30, 0x39, 0x64, 0x61, 0x64, 0x62, + 0x36, 0x65, 0x36, 0x31, 0x34, 0x35, 0x62, 0x62, 0x62, 0x63, 0x65, 0x38, + 0x33, 0x32, 0x66, 0x38, 0x65, 0x33, 0x63, 0x62, 0x35, 0x34, 0x66, 0x32, + 0x33, 0x63, 0x38, 0x34, 0x64, 0x62, 0x31, 0x63, 0x34, 0x39, 0x35, 0x37, + 0x64, 0x61, 0x63, 0x30, 0x34, 0x62, 0x65, 0x32, 0x36, 0x31, 0x35, 0x37, + 0x61, 0x31, 0x36, 0x65, 0x63, 0x65, 0x62, 0x39, 0x31, 0x62, 0x62, 0x32, + 0x35, 0x36, 0x37, 0x65, 0x33, 0x61, 0x32, 0x65, 0x62, 0x37, 0x39, 0x34, + 0x62, 0x66, 0x38, 0x65, 0x37, 0x64, 0x66, 0x39, 0x33, 0x37, 0x66, 0x64, + 0x32, 0x64, 0x65, 0x34, 0x36, 0x64, 0x34, 0x32, 0x31, 0x34, 0x34, 0x31, + 0x36, 0x64, 0x33, 0x63, 0x31, 0x39, 0x39, 0x66, 0x30, 0x35, 0x64, 0x33, + 0x62, 0x36, 0x66, 0x61, 0x37, 0x36, 0x61, 0x35, 0x65, 0x66, 0x36, 0x64, + 0x40, 0x35, 0x31, 0x2e, 0x31, 0x34, 0x31, 0x2e, 0x31, 0x31, 0x35, 0x2e, + 0x33, 0x3a, 0x33, 0x30, 0x33, 0x30, 0x33, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x5d, 0x0a, 0x7d, 0x0a, }, fi: FileInfo{ name: "mainnet_bootnodes.json", - size: 1715, - modTime: time.Unix(0, 1562248630066636616), + size: 2717, + modTime: time.Unix(0, 1566507438571866312), isDir: false, }, }, "/core/config/mainnet_genesis.json": File{ @@ -51421,7 +51505,7 @@ func init() { fi: FileInfo{ name: "morden_bootnodes.json", size: 3558, - modTime: time.Unix(0, 1564421327894760152), + modTime: time.Unix(0, 1566507375386185008), isDir: false, }, }, "/core/config/morden_genesis.json": File{ diff --git a/core/config/mainnet_bootnodes.json b/core/config/mainnet_bootnodes.json index f99fe369..d75b11da 100644 --- a/core/config/mainnet_bootnodes.json +++ b/core/config/mainnet_bootnodes.json @@ -1,14 +1,20 @@ { "bootstrap": [ - "enode://e809c4a2fec7daed400e5e28564e23693b23b2cc5a019b612505631bbe7b9ccf709c1796d2a3d29ef2b045f210caf51e3c4f5b6d3587d43ad5d6397526fa6179@174.112.32.157:30303", - "enode://6e538e7c1280f0a31ff08b382db5302480f775480b8e68f8febca0ceff81e4b19153c6f8bf60313b93bef2cc34d34e1df41317de0ce613a201d1660a788a03e2@52.206.67.235:30303", + "enode://158ac5a4817265d0d8b977660b3dbe9abee5694ed212f7091cbf784ddf47623ed015e1cb54594d10c1c46118747ddabe86ebf569cf24ae91f2daa0f1adaae390@159.203.56.33:30303", + "enode://efd48ad0879eeb7f9cb5e50f33f7bc21e805a72e90361f145baaa22dd75d111e7cd9c93f1b7060dcb30aa1b3e620269336dbf32339fea4c18925a4c15fe642df@18.205.66.229:30303", "enode://5fbfb426fbb46f8b8c1bd3dd140f5b511da558cd37d60844b525909ab82e13a25ee722293c829e52cb65c2305b1637fa9a2ea4d6634a224d5f400bfe244ac0de@162.243.55.45:30303", - "enode://42d8f29d1db5f4b2947cd5c3d76c6d0d3697e6b9b3430c3d41e46b4bb77655433aeedc25d4b4ea9d8214b6a43008ba67199374a9b53633301bca0cd20c6928ab@104.155.176.151:30303", - "enode://814920f1ec9510aa9ea1c8f79d8b6e6a462045f09caa2ae4055b0f34f7416fca6facd3dd45f1cf1673c0209e0503f02776b8ff94020e98b6679a0dc561b4eba0@104.154.136.117:30303", - "enode://72e445f4e89c0f476d404bc40478b0df83a5b500d2d2e850e08eb1af0cd464ab86db6160d0fde64bd77d5f0d33507ae19035671b3c74fec126d6e28787669740@104.198.71.200:30303", + "enode://6dd3ac8147fa82e46837ec8c3223d69ac24bcdbab04b036a3705c14f3a02e968f7f1adfcdb002aacec2db46e625c04bf8b5a1f85bb2d40a479b3cc9d45a444af@104.237.131.102:30303", + "enode://b9e893ea9cb4537f4fed154233005ae61b441cd0ecd980136138c304fefac194c25a16b73dac05fc66a4198d0c15dd0f33af99b411882c68a019dfa6bb703b9d@18.130.93.66:30303", + "enode://3fe9705a02487baea45c1ffebfa4d84819f5f1e68a0dbc18031553242a6a08e39499b61e361a52c2a92f9553efd63763f6fdd34692be0d4ba6823bb2fc346009@178.62.238.75:30303", + "enode://d50facc65e46bda6ff594b6e95491efa16e067de41ae96571d9f3cb853d538c44864496fa5e4df10115f02bbbaf47853f932e110a44c89227da7c30e96840596@188.166.163.187:30303", + "enode://a0d5c589dc02d008fe4237da9877a5f1daedee0227ab612677eabe323520f003eb5e311af335de9f7964c2092bbc2b3b7ab1cce5a074d8346959f0868b4e366e@46.101.78.44:30303", + "enode://c071d96b0c0f13006feae3977fb1b3c2f62caedf643df9a3655bc1b60f777f05e69a4e58bf3547bb299210092764c56df1e08380e91265baa845dca8bc0a71da@68.183.99.5:30303", + "enode://83b33409349ffa25e150555f7b4f8deebc68f3d34d782129dc3c8ba07b880c209310a4191e1725f2f6bef59bce9452d821111eaa786deab08a7e6551fca41f4f@206.189.68.191:30303", + "enode://0daae2a30f2c73b0b257746587136efb8e3479496f7ea1e943eeb9a663b72dd04582f699f7010ee02c57fc45d1f09568c20a9050ff937f9139e2973ddd98b87b@159.89.169.103:30303", + "enode://50808461dd73b3d70537e4c1e5fafd1132b3a90f998399af9205f8889987d62096d4e853813562dd43e7270a71c9d9d4e4dd73a534fdb22fbac98c389c1a7362@178.128.55.119:30303", "enode://5cd218959f8263bc3721d7789070806b0adff1a0ed3f95ec886fb469f9362c7507e3b32b256550b9a7964a23a938e8d42d45a0c34b332bfebc54b29081e83b93@35.187.57.94:30303", - "enode://39abab9d2a41f53298c0c9dc6bbca57b0840c3ba9dccf42aa27316addc1b7e56ade32a0a9f7f52d6c5db4fe74d8824bcedfeaecf1a4e533cacb71cf8100a9442@144.76.238.49:30303", - "enode://f50e675a34f471af2438b921914b5f06499c7438f3146f6b8936f1faeb50b8a91d0d0c24fb05a66f05865cd58c24da3e664d0def806172ddd0d4c5bdbf37747e@144.76.238.49:30306", - "enode://6dd3ac8147fa82e46837ec8c3223d69ac24bcdbab04b036a3705c14f3a02e968f7f1adfcdb002aacec2db46e625c04bf8b5a1f85bb2d40a479b3cc9d45a444af@104.237.131.102:30303" + "enode://66498ac935f3f54d873de4719bf2d6d61e0c74dd173b547531325bcef331480f9bedece91099810971c8567eeb1ae9f6954b013c47c6dc51355bbbbae65a8c16@54.148.165.1:30303", + "enode://73e74ce7426a17aa2d8b5bb64d796ec7dc4dcee2af9bbdd4434394d1e4e52e650b9e39202435fca29ce65c242fd6e59b93ed2cf37f04b645fb23e306273816ad@54.148.165.1:30304", + "enode://8809dadb6e6145bbbce832f8e3cb54f23c84db1c4957dac04be26157a16eceb91bb2567e3a2eb794bf8e7df937fd2de46d4214416d3c199f05d3b6fa76a5ef6d@51.141.115.3:30303" ] } diff --git a/core/defaults_test.go b/core/defaults_test.go index 377b0e31..352d69c9 100644 --- a/core/defaults_test.go +++ b/core/defaults_test.go @@ -262,8 +262,8 @@ func TestDefaultChainConfigurationVariablesExist(t *testing.T) { } // Number of bootstrap nodes - if l := len(DefaultConfigMainnet.ParsedBootstrap); l != 10 { - t.Errorf("got: %v, want: %v", l, 10) + if l := len(DefaultConfigMainnet.ParsedBootstrap); l != 16 { + t.Errorf("got: %v, want: %v", l, 16) } if l := len(DefaultConfigMorden.ParsedBootstrap); l != 21 { t.Errorf("got: %v, want: %v", l, 21) diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go index 2904203b..dc6025d0 100644 --- a/core/types/transaction_signing.go +++ b/core/types/transaction_signing.go @@ -163,7 +163,7 @@ func (s ChainIdSigner) PublicKey(tx *Transaction) ([]byte, error) { return nil, ErrInvalidChainId } - V := normaliseV(s, tx.data.V) + V := normaliseV(s, tx.data.V) - 27 if !crypto.ValidateSignatureValues(V, tx.data.R, tx.data.S, true) { return nil, ErrInvalidSig } @@ -173,7 +173,7 @@ func (s ChainIdSigner) PublicKey(tx *Transaction) ([]byte, error) { sig := make([]byte, 65) copy(sig[32-len(R):32], R) copy(sig[64-len(S):64], S) - sig[64] = V - 27 + sig[64] = V // recover the public key from the signature hash := s.Hash(tx) @@ -275,7 +275,7 @@ func (fs BasicSigner) PublicKey(tx *Transaction) ([]byte, error) { return nil, ErrInvalidSig } - V := byte(tx.data.V.Uint64()) + V := byte(tx.data.V.Uint64()) - 27 if !crypto.ValidateSignatureValues(V, tx.data.R, tx.data.S, false) { return nil, ErrInvalidSig } @@ -284,7 +284,7 @@ func (fs BasicSigner) PublicKey(tx *Transaction) ([]byte, error) { sig := make([]byte, 65) copy(sig[32-len(r):32], r) copy(sig[64-len(s):64], s) - sig[64] = V - 27 + sig[64] = V // recover the public key from the snature hash := fs.Hash(tx) diff --git a/core/vm/contracts.go b/core/vm/contracts.go index f2509601..630c326d 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -218,8 +218,7 @@ func ecrecoverFunc(in []byte) ([]byte, error) { r := new(big.Int).SetBytes(in[64:96]) s := new(big.Int).SetBytes(in[96:128]) // Treat V as a 256bit integer - vbig := new(big.Int).SetBytes(in[32:64]) - v := byte(vbig.Uint64()) + v := in[63] - 27 // tighter sig s values in homestead only apply to tx sigs if !allZero(in[32:63]) || !crypto.ValidateSignatureValues(v, r, s, false) { @@ -228,10 +227,7 @@ func ecrecoverFunc(in []byte) ([]byte, error) { } // v needs to be at the end and normalized for libsecp256k1 - vbignormal := new(big.Int).Sub(vbig, big.NewInt(27)) - vnormal := byte(vbignormal.Uint64()) - rsv := append(in[64:128], vnormal) - pubKey, err := crypto.Ecrecover(in[:32], rsv) + pubKey, err := crypto.Ecrecover(in[:32], append(in[64:128], v)) // make sure the public key is a valid one if err != nil { glog.V(logger.Detail).Infoln("ECRECOVER error: ", err) diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go new file mode 100644 index 00000000..f26034f0 --- /dev/null +++ b/core/vm/contracts_test.go @@ -0,0 +1,30 @@ +package vm + +import ( + "testing" + + "github.com/eth-classic/go-ethereum/common" +) + +type precompiledTest struct { + input, expected string + gas uint64 +} + +func testEcRecover(test precompiledTest, t *testing.T) { + in := common.Hex2Bytes(test.input) + if res, err := ecrecoverFunc(in); err != nil { + t.Error(err) + } else if common.Bytes2Hex(res) != test.expected { + t.Errorf("Expected %v, got %v", test.expected, common.Bytes2Hex(res)) + } +} + +func TestPrecompiledEcRecover(t *testing.T) { + test := precompiledTest{ + input: "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + expected: "000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d", + } + + testEcRecover(test, t) +} diff --git a/crypto/crypto.go b/crypto/crypto.go index 34a9cbf2..feb3d3b0 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -167,7 +167,7 @@ func ValidateSignatureValues(v byte, r, s *big.Int, homestead bool) bool { if s.Cmp(secp256k1.N) >= 0 { return false } - if r.Cmp(secp256k1.N) < 0 && (vint == 27 || vint == 28) { + if r.Cmp(secp256k1.N) < 0 && (vint == 0 || vint == 1) { return true } else { return false diff --git a/crypto/crypto_test.go b/crypto/crypto_test.go index d710203d..f2d20343 100644 --- a/crypto/crypto_test.go +++ b/crypto/crypto_test.go @@ -226,38 +226,38 @@ func TestValidateSignatureValues(t *testing.T) { secp256k1nMinus1 := new(big.Int).Sub(secp256k1.N, common.Big1) // correct v,r,s - check(true, 27, one, one) - check(true, 28, one, one) + check(true, 0, one, one) + check(true, 1, one, one) // incorrect v, correct r,s, check(false, 30, one, one) check(false, 26, one, one) // incorrect v, combinations of incorrect/correct r,s at lower limit + check(false, 3, zero, zero) + check(false, 3, zero, one) + check(false, 3, one, zero) + check(false, 3, one, one) + + // correct v for any combination of incorrect r,s check(false, 0, zero, zero) check(false, 0, zero, one) check(false, 0, one, zero) - check(false, 0, one, one) - - // correct v for any combination of incorrect r,s - check(false, 27, zero, zero) - check(false, 27, zero, one) - check(false, 27, one, zero) - check(false, 28, zero, zero) - check(false, 28, zero, one) - check(false, 28, one, zero) + check(false, 1, zero, zero) + check(false, 1, zero, one) + check(false, 1, one, zero) // correct sig with max r,s - check(true, 27, secp256k1nMinus1, secp256k1nMinus1) + check(true, 0, secp256k1nMinus1, secp256k1nMinus1) // correct v, combinations of incorrect r,s at upper limit - check(false, 27, secp256k1.N, secp256k1nMinus1) - check(false, 27, secp256k1nMinus1, secp256k1.N) - check(false, 27, secp256k1.N, secp256k1.N) + check(false, 0, secp256k1.N, secp256k1nMinus1) + check(false, 0, secp256k1nMinus1, secp256k1.N) + check(false, 0, secp256k1.N, secp256k1.N) // current callers ensures r,s cannot be negative, but let's test for that too // as crypto package could be used stand-alone - check(false, 27, minusOne, one) - check(false, 27, one, minusOne) + check(false, 0, minusOne, one) + check(false, 0, one, minusOne) } func checkhash(t *testing.T, name string, f func([]byte) []byte, msg, exp []byte) { diff --git a/go.mod b/go.mod index 22169d7c..5804944f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/eth-classic/go-ethereum require ( + github.com/Microsoft/go-winio v0.4.14 github.com/boltdb/bolt v1.3.1 github.com/davecgh/go-spew v1.1.1 github.com/denisbrodbeck/machineid v0.8.0 //mark @@ -16,6 +17,7 @@ require ( github.com/maruel/panicparse v1.2.0 // indirect github.com/mattn/go-colorable v0.1.2 // indirect github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762 // indirect + github.com/omeid/go-resources v0.0.0-20190324090249-46f4269d8abd // indirect github.com/peterh/liner v1.1.0 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a github.com/rjeczalik/notify v0.9.1 @@ -26,7 +28,7 @@ require ( github.com/syndtr/goleveldb v0.0.0-20171214120811-34011bf325bc golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 golang.org/x/net v0.0.0-20190419010253-1f3472d942ba - golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a + golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b golang.org/x/tools v0.0.0-20190520220859-26647e34d3c0 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 gopkg.in/fatih/set.v0 v0.1.0 diff --git a/go.sum b/go.sum index b9be5627..aa1bf122 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -34,6 +36,7 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68U github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jackpal/go-nat-pmp v1.0.1 h1:i0LektDkO1QlrTm/cSuP+PyBCDnYvjPLGl4LdWEMiaA= github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983 h1:wL11wNW7dhKIcRCHSm4sHKPWz0tt4mwBsVodG7+Xyqg= github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/maruel/panicparse v1.1.1 h1:k62YPcEoLncEEpjMt92GtG5ugb8WL/510Ys3/h5IkRc= @@ -56,11 +59,14 @@ github.com/nsf/termbox-go v0.0.0-20190325093121-288510b9734e h1:Vbib8wJAaMEF9jus github.com/nsf/termbox-go v0.0.0-20190325093121-288510b9734e/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762 h1:44Lv0bNi88GweB54TCjB/lEJgp+2Ze5WFpwNu0nh0ag= github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= +github.com/omeid/go-resources v0.0.0-20190324090249-46f4269d8abd h1:VxcHM9xpZ4BHxQPYWAavsxPciBZITxmnGNyIO7hsUfk= +github.com/omeid/go-resources v0.0.0-20190324090249-46f4269d8abd/go.mod h1:SIESmZeFlCKsQZcd2NEiX8spNNmCWB1V/RbM/eBKDfo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/peterh/liner v1.1.0 h1:f+aAedNJA6uk7+6rXsYBnhdo4Xux7ESLe+kcuVUF5os= github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= @@ -73,9 +79,12 @@ github.com/robertkrimen/otto v0.0.0-20180617131154-15f95af6e78d h1:1VUlQbCfkoSGv github.com/robertkrimen/otto v0.0.0-20180617131154-15f95af6e78d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/rs/cors v0.0.0-20170727213201-7af7a1e09ba3 h1:86ukAHRTa2CXdBnWJHcjjPPGTyLGEF488OFRsbBAuFs= github.com/rs/cors v0.0.0-20170727213201-7af7a1e09ba3/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/syndtr/goleveldb v0.0.0-20171214120811-34011bf325bc h1:yhWARKbbDg8UBRi/M5bVcVOBg2viFKcNJEAtHMYbRBo= @@ -90,6 +99,7 @@ golang.org/x/net v0.0.0-20190419010253-1f3472d942ba h1:h0zCzEL5UW1mERvwTN6AXcc75 golang.org/x/net v0.0.0-20190419010253-1f3472d942ba/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -97,6 +107,8 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a h1:XCr/YX7O0uxRkLq2k1ApNQMims9eCioF9UpzIPBDmuo= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190418235243-4796d4bd3df0 h1:lbNsjVP0Wn4gPLH85BefnAUMitP3PYyQQbeRTwdAPJw= diff --git a/p2p/discover/node_test.go b/p2p/discover/node_test.go index a7d3d3fc..9a2bcfb1 100644 --- a/p2p/discover/node_test.go +++ b/p2p/discover/node_test.go @@ -150,7 +150,7 @@ func TestParseNode(t *testing.T) { if err == nil { t.Errorf("test %q:\n got nil error, expected %#q", test.rawurl, test.wantError) continue - } else if err.Error() != test.wantError { + } else if !strings.Contains(err.Error(), test.wantError) { t.Errorf("test %q:\n got error %#q, expected %#q", test.rawurl, err.Error(), test.wantError) continue } diff --git a/rpc/ipc_windows.go b/rpc/ipc_windows.go index 8762cdb0..e333a5b2 100644 --- a/rpc/ipc_windows.go +++ b/rpc/ipc_windows.go @@ -22,7 +22,7 @@ import ( "net" "time" - winio "github.com/microsoft/go-winio" + winio "github.com/Microsoft/go-winio" ) // ipcListen will create a named pipe on the given endpoint.