From dca78160bad6e35e37fd9822b906baaefc511a57 Mon Sep 17 00:00:00 2001 From: a10zn8 Date: Fri, 9 Dec 2022 14:00:45 +0400 Subject: [PATCH] Revert "Sync upstream 7.12.2022" --- demo/test.html | 13 - docs/reference-configuration.adoc | 3 +- .../dshackle/proxy/WebsocketHandler.kt | 4 +- .../io/emeraldpay/dshackle/rpc/NativeCall.kt | 33 +- .../dshackle/upstream/DefaultUpstream.kt | 5 - .../upstream/ethereum/WsConnection.kt | 3 +- .../upstream/rpcclient/JsonRpcGrpcClient.kt | 77 +- .../upstream/rpcclient/JsonRpcHttpClient.kt | 99 +- .../upstream/rpcclient/ResponseParser.kt | 20 +- .../upstream/rpcclient/ResponseWSParser.kt | 10 - .../config/CacheConfigReaderSpec.groovy | 4 +- .../config/HealthConfigReaderSpec.groovy | 6 +- .../config/MainConfigReaderSpec.groovy | 9 +- .../config/MonitoringConfigReaderSpec.groovy | 2 +- .../config/ProxyConfigReaderSpec.groovy | 8 +- .../config/UpstreamsConfigReaderSpec.groovy | 32 +- .../dshackle/rpc/NativeCallSpec.groovy | 31 - .../dshackle/test/MockGrpcServer.groovy | 8 + .../dshackle/test/TestingCommons.groovy | 2 +- .../upstream/ethereum/WsConnectionSpec.groovy | 6 +- .../rpcclient/JsonRpcGrpcClientSpec.groovy | 88 - .../rpcclient/JsonRpcHttpClientSpec.groovy | 46 +- .../rpcclient/ResponseRpcParserSpec.groovy | 23 - .../rpcclient/ResponseWSParserSpec.groovy | 20 - .../upstream/signature/EcdsaSignerSpec.groovy | 4 +- .../{configs => }/cache-redis-disabled.yaml | 0 .../{configs => }/cache-redis-full.yaml | 0 .../resources/configs/upstreams-priority.yaml | 26 - .../{configs => }/dshackle-full.yaml | 0 .../{configs => }/dshackle-health-1.yaml | 0 .../{configs => }/dshackle-health-2.yaml | 0 .../{configs => }/dshackle-health-empty.yaml | 0 .../dshackle-monitoring-basic.yaml | 0 .../{configs => }/dshackle-proxy-basic.yaml | 0 .../{configs => }/dshackle-proxy-max.yaml | 0 .../{configs => }/dshackle-proxy-no-ws.yaml | 0 .../{configs => }/dshackle-proxy-two.yaml | 0 .../{configs => }/upstreams-basic.yaml | 0 .../upstreams-bitcoin-esplora.yaml | 0 .../{configs => }/upstreams-bitcoin.yaml | 0 .../resources/{configs => }/upstreams-ds.yaml | 0 .../{configs => }/upstreams-extra.yaml | 0 .../{configs => }/upstreams-labels.yaml | 0 .../upstreams-methods-quorum.yaml | 0 .../{configs => }/upstreams-methods.yaml | 0 .../{configs => }/upstreams-no-defaults.yaml | 0 .../{configs => }/upstreams-no-id.yaml | 0 .../{configs => }/upstreams-options.yaml | 0 .../{configs => }/upstreams-roles-2.yaml | 0 .../upstreams-roles-invalid.yaml | 0 .../{configs => }/upstreams-roles.yaml | 0 .../{configs => }/upstreams-ws-full.yaml | 0 .../{configs => }/upstreams-ws-only.yaml | 0 testing/.gitignore | 3 + testing/README.adoc | 104 + testing/dshackle/README.adoc | 14 + testing/dshackle/dshackle-basic.yaml | 50 + testing/dshackle/dshackle-real.yaml | 30 + testing/dshackle/dshackle-rinkeby.yaml | 26 + .../signer => testing/dshackle}/test_key | 0 .../signer => testing/dshackle}/test_key.pub | 0 testing/simple-upstream/README.adoc | 6 + testing/simple-upstream/build.gradle | 22 + testing/simple-upstream/settings.gradle | 1 + .../main/groovy/testing/BlocksHandler.groovy | 32 + .../main/groovy/testing/CallHandler.groovy | 48 + .../main/groovy/testing/CommonHandlers.groovy | 25 + .../groovy/testing/InternalHandler.groovy | 35 + .../groovy/testing/InvalidCallHandler.groovy | 8 + .../groovy/testing/PingPongHandler.groovy | 12 + .../groovy/testing/ResourceResponse.groovy | 25 + .../main/groovy/testing/SimpleUpstream.groovy | 73 + .../groovy/testing/TestcaseHandler.groovy | 44 + .../src/main/resources/block-0x100000.json | 25 + .../src/main/resources/block-0x100001.json | 26 + .../src/main/resources/chain-id.json | 5 + .../src/main/resources/trace-0xd949bc.json | 6966 +++++++++++++++++ ...0f871c7679841d86ae5bb98676bb2d8e68dfa.json | 16 + ...1c5ee3f686a86b2aa673552cf0f9de9a42e77.json | 16 + ...1ddfe8d9c1975d2b8375a522700f7f59c3ed0.json | 16 + ...08b159aa07e97b8e8cddb8f81cb606e13382e.json | 16 + testing/trial/README.adoc | 8 + testing/trial/build.gradle | 35 + testing/trial/settings.gradle | 1 + .../dshackle/testing/trial/Client.groovy | 6 + .../dshackle/testing/trial/Debugger.groovy | 20 + .../dshackle/testing/trial/ProtoClient.groovy | 64 + .../dshackle/testing/trial/ProxyClient.groovy | 83 + .../trial/basicproxy/DispatchSpec.groovy | 63 + .../trial/basicproxy/GivesErrorSpec.groovy | 74 + .../basicproxy/HardcodedCallsSpec.groovy | 36 + .../trial/basicproxy/MetamaskCallSpec.groovy | 20 + .../trial/basicproxy/StandardCallsSpec.groovy | 166 + .../testing/trial/mainnet/GetBlockSpec.groovy | 40 + .../trial/rinkeby/CallContractSpec.groovy | 30 + 95 files changed, 8426 insertions(+), 446 deletions(-) delete mode 100644 demo/test.html delete mode 100644 src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClientSpec.groovy rename src/test/resources/{configs => }/cache-redis-disabled.yaml (100%) rename src/test/resources/{configs => }/cache-redis-full.yaml (100%) delete mode 100644 src/test/resources/configs/upstreams-priority.yaml rename src/test/resources/{configs => }/dshackle-full.yaml (100%) rename src/test/resources/{configs => }/dshackle-health-1.yaml (100%) rename src/test/resources/{configs => }/dshackle-health-2.yaml (100%) rename src/test/resources/{configs => }/dshackle-health-empty.yaml (100%) rename src/test/resources/{configs => }/dshackle-monitoring-basic.yaml (100%) rename src/test/resources/{configs => }/dshackle-proxy-basic.yaml (100%) rename src/test/resources/{configs => }/dshackle-proxy-max.yaml (100%) rename src/test/resources/{configs => }/dshackle-proxy-no-ws.yaml (100%) rename src/test/resources/{configs => }/dshackle-proxy-two.yaml (100%) rename src/test/resources/{configs => }/upstreams-basic.yaml (100%) rename src/test/resources/{configs => }/upstreams-bitcoin-esplora.yaml (100%) rename src/test/resources/{configs => }/upstreams-bitcoin.yaml (100%) rename src/test/resources/{configs => }/upstreams-ds.yaml (100%) rename src/test/resources/{configs => }/upstreams-extra.yaml (100%) rename src/test/resources/{configs => }/upstreams-labels.yaml (100%) rename src/test/resources/{configs => }/upstreams-methods-quorum.yaml (100%) rename src/test/resources/{configs => }/upstreams-methods.yaml (100%) rename src/test/resources/{configs => }/upstreams-no-defaults.yaml (100%) rename src/test/resources/{configs => }/upstreams-no-id.yaml (100%) rename src/test/resources/{configs => }/upstreams-options.yaml (100%) rename src/test/resources/{configs => }/upstreams-roles-2.yaml (100%) rename src/test/resources/{configs => }/upstreams-roles-invalid.yaml (100%) rename src/test/resources/{configs => }/upstreams-roles.yaml (100%) rename src/test/resources/{configs => }/upstreams-ws-full.yaml (100%) rename src/test/resources/{configs => }/upstreams-ws-only.yaml (100%) create mode 100644 testing/.gitignore create mode 100644 testing/README.adoc create mode 100644 testing/dshackle/README.adoc create mode 100644 testing/dshackle/dshackle-basic.yaml create mode 100644 testing/dshackle/dshackle-real.yaml create mode 100644 testing/dshackle/dshackle-rinkeby.yaml rename {src/test/resources/signer => testing/dshackle}/test_key (100%) rename {src/test/resources/signer => testing/dshackle}/test_key.pub (100%) create mode 100644 testing/simple-upstream/README.adoc create mode 100644 testing/simple-upstream/build.gradle create mode 100644 testing/simple-upstream/settings.gradle create mode 100644 testing/simple-upstream/src/main/groovy/testing/BlocksHandler.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/CallHandler.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/CommonHandlers.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/InternalHandler.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/InvalidCallHandler.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/PingPongHandler.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/ResourceResponse.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/SimpleUpstream.groovy create mode 100644 testing/simple-upstream/src/main/groovy/testing/TestcaseHandler.groovy create mode 100644 testing/simple-upstream/src/main/resources/block-0x100000.json create mode 100644 testing/simple-upstream/src/main/resources/block-0x100001.json create mode 100644 testing/simple-upstream/src/main/resources/chain-id.json create mode 100644 testing/simple-upstream/src/main/resources/trace-0xd949bc.json create mode 100644 testing/simple-upstream/src/main/resources/tx-0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa.json create mode 100644 testing/simple-upstream/src/main/resources/tx-0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77.json create mode 100644 testing/simple-upstream/src/main/resources/tx-0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0.json create mode 100644 testing/simple-upstream/src/main/resources/tx-0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e.json create mode 100644 testing/trial/README.adoc create mode 100644 testing/trial/build.gradle create mode 100644 testing/trial/settings.gradle create mode 100644 testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Client.groovy create mode 100644 testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Debugger.groovy create mode 100644 testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProtoClient.groovy create mode 100644 testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProxyClient.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/DispatchSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/GivesErrorSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/HardcodedCallsSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/MetamaskCallSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/StandardCallsSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/mainnet/GetBlockSpec.groovy create mode 100644 testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/rinkeby/CallContractSpec.groovy diff --git a/demo/test.html b/demo/test.html deleted file mode 100644 index 9a44c15a..00000000 --- a/demo/test.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/docs/reference-configuration.adoc b/docs/reference-configuration.adoc index d71e8589..0d691617 100644 --- a/docs/reference-configuration.adoc +++ b/docs/reference-configuration.adoc @@ -678,8 +678,7 @@ configuration, and may be omitted for most of the situations. | `role` | no -| `primary` (default), `secondary` or `fallback`. -First it makes the requests to the upstreams with role `primary`, then if none are available to upstreams with role `secondary`. +| `standard` (default) or `fallback`. Fallback role mean that the upstream is used only after other upstreams failed or didn't return quorum | `chain` diff --git a/src/main/kotlin/io/emeraldpay/dshackle/proxy/WebsocketHandler.kt b/src/main/kotlin/io/emeraldpay/dshackle/proxy/WebsocketHandler.kt index b1fb0d7a..3882d05b 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/proxy/WebsocketHandler.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/proxy/WebsocketHandler.kt @@ -27,6 +27,7 @@ import io.emeraldpay.dshackle.rpc.NativeSubscribe import io.emeraldpay.etherjar.rpc.json.RequestJson import io.emeraldpay.etherjar.rpc.json.ResponseJson import io.netty.buffer.ByteBufInputStream +import io.netty.buffer.Unpooled import org.reactivestreams.Publisher import org.slf4j.LoggerFactory import reactor.core.publisher.Flux @@ -73,8 +74,9 @@ class WebsocketHandler( val eventHandler = accessHandler.start(req, routeConfig.blockchain) val responses = respond(routeConfig.blockchain, control, requests, eventHandler) + .map { Unpooled.wrappedBuffer(it.toByteArray()) } - resp.sendString(responses, Charsets.UTF_8) + resp.send(responses) .then() } } diff --git a/src/main/kotlin/io/emeraldpay/dshackle/rpc/NativeCall.kt b/src/main/kotlin/io/emeraldpay/dshackle/rpc/NativeCall.kt index 912f7c64..73d52cd4 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/rpc/NativeCall.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/rpc/NativeCall.kt @@ -284,7 +284,11 @@ open class NativeCall( Mono.just(ctx).flatMap(this::executeOnRemote) ) .onErrorResume { - Mono.just(CallResult.fail(ctx.id, ctx.nonce, it)) + if (it is CallFailure) { + Mono.just(CallResult.fail(it.id, ctx.nonce, it.reason)) + } else { + Mono.just(CallResult.fail(ctx.id, ctx.nonce, it)) + } } } @@ -308,14 +312,21 @@ open class NativeCall( CallResult.ok(ctx.id, ctx.nonce, bytes, it.signature, ctx.upstream.getId()) } .onErrorResume { t -> - Mono.just(CallResult.fail(ctx.id, ctx.nonce, t)) + val failure = when (t) { + is CallFailure -> CallResult.fail(t.id, ctx.nonce, t.reason) + is JsonRpcException -> CallResult.fail(ctx.id, ctx.nonce, t.error.code, t.error.message) + else -> CallResult.fail(ctx.id, ctx.nonce, t) + } + Mono.just(failure) } .switchIfEmpty( Mono.fromSupplier { counter.get().let { attempts -> CallResult.fail( - ctx.id, ctx.nonce, - CallError(1, "No response or no available upstream for ${ctx.payload.method}", null) + ctx.id, + ctx.nonce, + 1, + errorMessage(attempts, ctx.payload.method) ).also { countFailure(attempts, ctx) } @@ -480,15 +491,7 @@ open class NativeCall( is JsonRpcException -> CallError(t.id.asNumber().toInt(), t.error.message, t.error) is RpcException -> CallError(t.code, t.rpcMessage, null) is CallFailure -> CallError(t.id, t.reason.message ?: "Upstream Error", null) - else -> { - // May only happen if it's an unhandled exception. - // In this case try to find a meaningless details in the stack. Most important reason for doing that is to find an ID of the request - if (t.cause != null) { - from(t.cause!!) - } else { - CallError(1, t.message ?: "Upstream Error", null) - } - } + else -> CallError(1, t.message ?: "Upstream Error", null) } } } @@ -507,8 +510,8 @@ open class NativeCall( return CallResult(id, nonce, result, null, signature, upstreamId) } - fun fail(id: Int, nonce: Long?, error: CallError): CallResult { - return CallResult(id, nonce, null, error, null, null) + fun fail(id: Int, nonce: Long?, errorCore: Int, errorMessage: String): CallResult { + return CallResult(id, nonce, null, CallError(errorCore, errorMessage, null), null, null) } fun fail(id: Int, nonce: Long?, error: Throwable): CallResult { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/DefaultUpstream.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/DefaultUpstream.kt index 0f967fba..451a53b4 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/DefaultUpstream.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/DefaultUpstream.kt @@ -98,11 +98,6 @@ abstract class DefaultUpstream( } fun statusByLag(lag: Long, proposed: UpstreamAvailability): UpstreamAvailability { - if (options.disableValidation == true) { - // if we specifically told that this upstream should be _always valid_ then skip - // the status calculation and trust the proposed value as is - return proposed - } return if (proposed == UpstreamAvailability.OK) { when { lag > 6 -> UpstreamAvailability.SYNCING diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/WsConnection.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/WsConnection.kt index 5373e796..c30f3f89 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/WsConnection.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/WsConnection.kt @@ -405,8 +405,7 @@ open class WsConnection( ) val response = Flux.from(rpcReceive.asFlux()) - // send the request _after_ WS subscribes to the responses, otherwise the response may come before the actual subscription and be lost - .doOnRequest { sendRpc(request) } + .doOnSubscribe { sendRpc(request) } .filter { resp -> resp.id.asNumber() == expectedId } .take(Defaults.timeout) .take(1) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClient.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClient.kt index b525b1c2..8acff9e2 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClient.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClient.kt @@ -25,8 +25,6 @@ import io.emeraldpay.dshackle.reader.Reader import io.emeraldpay.dshackle.upstream.signature.ResponseSigner import io.emeraldpay.etherjar.rpc.RpcException import io.emeraldpay.etherjar.rpc.RpcResponseError -import io.grpc.StatusRuntimeException -import org.apache.commons.lang3.time.StopWatch import org.slf4j.LoggerFactory import reactor.core.publisher.Mono import java.util.concurrent.TimeUnit @@ -34,7 +32,7 @@ import java.util.concurrent.TimeUnit class JsonRpcGrpcClient( private val stub: ReactorBlockchainGrpc.ReactorBlockchainStub, private val chain: Chain, - private val metrics: RpcMetrics?, + private val metrics: RpcMetrics ) { companion object { @@ -48,11 +46,11 @@ class JsonRpcGrpcClient( class Executor( private val stub: ReactorBlockchainGrpc.ReactorBlockchainStub, private val chain: Chain, - private val metrics: RpcMetrics? + private val metrics: RpcMetrics ) : Reader { override fun read(key: JsonRpcRequest): Mono { - val timer = StopWatch() + var startTime: Long = 0 val req = BlockchainOuterClass.NativeCallRequest.newBuilder() .setChainValue(chain.id) @@ -68,58 +66,39 @@ class JsonRpcGrpcClient( req.addItems(reqItem.build()) return Mono.just(key) - .doOnNext { timer.start() } - .flatMap { + .doOnNext { + startTime = System.nanoTime() + }.flatMap { stub.nativeCall(req.build()) .single() - .onErrorResume(::handleError) - .flatMap(::handleResponse) + .flatMap { resp -> + if (resp.succeed) { + val bytes = resp.payload.toByteArray() + val signature = if (resp.hasSignature()) { + extractSignature(resp.signature) + } else { + null + } + Mono.just(JsonRpcResponse(bytes, null, JsonRpcResponse.NumberId(0), signature)) + } else { + metrics.fails.increment() + Mono.error( + RpcException( + RpcResponseError.CODE_UPSTREAM_CONNECTION_ERROR, + resp.errorMessage + ) + ) + } + } } .doOnNext { - if (timer.isStarted) { - metrics?.timer?.record(timer.getTime(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS) + if (startTime > 0) { + val now = System.nanoTime() + metrics.timer.record(now - startTime, TimeUnit.NANOSECONDS) } } } - fun handleResponse(resp: BlockchainOuterClass.NativeCallReplyItem): Mono = - if (resp.succeed) { - val bytes = resp.payload.toByteArray() - val signature = if (resp.hasSignature()) { - extractSignature(resp.signature) - } else { - null - } - Mono.just(JsonRpcResponse(bytes, null, JsonRpcResponse.NumberId(0), signature)) - } else { - metrics?.fails?.increment() - Mono.error( - RpcException( - RpcResponseError.CODE_UPSTREAM_CONNECTION_ERROR, - resp.errorMessage - ) - ) - } - - fun handleError(t: Throwable): Mono { - metrics?.fails?.increment() - return when (t) { - is StatusRuntimeException -> Mono.error( - RpcException( - RpcResponseError.CODE_UPSTREAM_CONNECTION_ERROR, - "Remote status code: ${t.status.code.name}" - ) - ) - - else -> Mono.error( - RpcException( - RpcResponseError.CODE_UPSTREAM_CONNECTION_ERROR, - "Other connection error" - ) - ) - } - } - fun extractSignature(resp: NativeCallReplySignature?): ResponseSigner.Signature? { if (resp == null || resp.signature == null || resp.signature.isEmpty || resp.upstreamId == null || resp.upstreamId.isEmpty()) { return null diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClient.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClient.kt index 154ea0c4..8535bdc2 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClient.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClient.kt @@ -24,13 +24,10 @@ import io.netty.handler.codec.http.HttpHeaderNames import io.netty.handler.codec.http.HttpHeaders import io.netty.handler.ssl.SslContextBuilder import io.netty.resolver.DefaultAddressResolverGroup -import org.apache.commons.lang3.time.StopWatch import org.slf4j.LoggerFactory import reactor.core.publisher.Mono import reactor.netty.http.client.HttpClient import reactor.netty.resources.ConnectionProvider -import reactor.util.function.Tuple2 -import reactor.util.function.Tuples import java.io.ByteArrayInputStream import java.security.KeyStore import java.security.cert.CertificateFactory @@ -38,7 +35,6 @@ import java.security.cert.X509Certificate import java.util.Base64 import java.util.concurrent.TimeUnit import java.util.function.Consumer -import java.util.function.Function /** * JSON RPC client @@ -93,95 +89,52 @@ class JsonRpcHttpClient( this.httpClient = build } - fun execute(request: ByteArray): Mono> { + fun execute(request: ByteArray): Mono { val response = httpClient .post() .uri(target) .send(Mono.just(request).map { Unpooled.wrappedBuffer(it) }) return response.response { header, bytes -> - val statusCode = header.status().code() - bytes.aggregate().asByteArray().map { - Tuples.of(statusCode, it) + if (header.status().code() != 200) { + Mono.error( + JsonRpcException( + JsonRpcResponse.NumberId(-2), + JsonRpcError( + RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE, + "HTTP Code: ${header.status().code()}" + ) + ) + ) + } else { + bytes.aggregate().asByteArray() } }.single() } override fun read(key: JsonRpcRequest): Mono { - val startTime = StopWatch() + var startTime: Long = 0 return Mono.just(key) .map(JsonRpcRequest::toJson) - .doOnNext { startTime.start() } + .doOnNext { + startTime = System.nanoTime() + } .flatMap(this@JsonRpcHttpClient::execute) .doOnNext { - if (startTime.isStarted) { - metrics.timer.record(startTime.nanoTime, TimeUnit.NANOSECONDS) + if (startTime > 0) { + val now = System.nanoTime() + metrics.timer.record(now - startTime, TimeUnit.NANOSECONDS) } } - .transform(asJsonRpcResponse(key)) - .transform(convertErrors(key)) - .transform(throwIfError()) - } - - /** - * The subscribers expect to catch an exception if the response contains JSON RPC Error. Convert it here to JsonRpcException - */ - private fun throwIfError(): Function, Mono> { - return Function { resp -> - resp.flatMap { - if (it.hasError()) { - Mono.error(JsonRpcException(it.id, it.error!!)) - } else { - Mono.just(it) - } - } - } - } - - /** - * Convert internal exceptions to standard JsonRpcException - */ - private fun convertErrors(key: JsonRpcRequest): Function, Mono> { - return Function { resp -> - resp.onErrorResume { t -> + .map(parser::parse) + .onErrorResume { t -> val err = when (t) { - is RpcException -> JsonRpcException.from(t) - is JsonRpcException -> t - else -> JsonRpcException(key.id, t.message ?: t.javaClass.name) + is RpcException -> JsonRpcResponse.error(t.code, t.rpcMessage) + is JsonRpcException -> JsonRpcResponse.error(t.error, JsonRpcResponse.NumberId(1)) + else -> JsonRpcResponse.error(1, t.message ?: t.javaClass.name) } - // here we're measure the internal errors, not upstream errors metrics.fails.increment() - Mono.error(err) + Mono.just(err) } - } - } - - /** - * Process response from the upstream and convert it to JsonRpcResponse. - * The input is a pair of (Http Status Code, Http Response Body) - */ - private fun asJsonRpcResponse(key: JsonRpcRequest): Function>, Mono> { - return Function { resp -> - resp.map { - val parsed = parser.parse(it.t2) - val statusCode = it.t1 - if (statusCode != 200) { - if (parsed.hasError() && parsed.error!!.code != RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE) { - // extracted the error details from the HTTP Body - parsed - } else { - // here we got a valid response with ERROR as HTTP Status Code. We assume that HTTP Status has - // a higher priority so return an error here anyway - JsonRpcResponse.error( - RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE, - "HTTP Code: $statusCode", - JsonRpcResponse.NumberId(key.id) - ) - } - } else { - parsed - } - } - } } } diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt index 2e4927b3..56f106a0 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseParser.kt @@ -21,7 +21,6 @@ import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonToken import io.emeraldpay.dshackle.Global import io.emeraldpay.etherjar.rpc.RpcResponseError -import org.apache.commons.lang3.StringUtils import org.slf4j.LoggerFactory import java.io.IOException @@ -59,18 +58,15 @@ abstract class ResponseParser { } catch (e: JsonParseException) { log.warn("Failed to parse JSON from upstream: ${e.message}") } - return if (state.isReady) { - state - } else { - log.debug("Failed to parse `${StringUtils.abbreviateMiddle(String(json), "...", 200)}` JSON") - state.copy( - result = null, - error = JsonRpcError( - RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE, - "Invalid JSON structure: never finalized" - ) - ) + if (state.isReady) { + return state } + return Preparsed( + error = JsonRpcError( + RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE, + "Invalid JSON structure: never finalized" + ) + ) } open fun process(parser: JsonParser, json: ByteArray, field: String, state: Preparsed): Preparsed { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParser.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParser.kt index 02a7416b..87c76746 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParser.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParser.kt @@ -44,16 +44,6 @@ class ResponseWSParser : ResponseParser() { state.error ) } - if (state.error != null) { - return WsResponse( - // we don't have any real option because it's just an invalid value and can be anything, - // so let's suppose its Type as RPC as a most likely scenario - Type.RPC, - state.id ?: JsonRpcResponse.Id.from(0), - null, - state.error - ) - } throw IllegalStateException("State is not ready") } diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/CacheConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/CacheConfigReaderSpec.groovy index 99305cf9..8b0901ed 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/CacheConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/CacheConfigReaderSpec.groovy @@ -23,7 +23,7 @@ class CacheConfigReaderSpec extends Specification { def "Read full"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/cache-redis-full.yaml") + def config = this.class.getClassLoader().getResourceAsStream("cache-redis-full.yaml") when: def act = reader.read(config) @@ -39,7 +39,7 @@ class CacheConfigReaderSpec extends Specification { def "Read disabled"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/cache-redis-disabled.yaml") + def config = this.class.getClassLoader().getResourceAsStream("cache-redis-disabled.yaml") when: def act = reader.read(config) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/HealthConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/HealthConfigReaderSpec.groovy index 9006581b..a340c75c 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/HealthConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/HealthConfigReaderSpec.groovy @@ -24,7 +24,7 @@ class HealthConfigReaderSpec extends Specification { def "Read empty"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-health-empty.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-health-empty.yaml") when: def act = reader.read(config) @@ -38,7 +38,7 @@ class HealthConfigReaderSpec extends Specification { def "Read single"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-health-1.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-health-1.yaml") when: def act = reader.read(config) @@ -58,7 +58,7 @@ class HealthConfigReaderSpec extends Specification { def "Read multiple"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-health-2.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-health-2.yaml") when: def act = reader.read(config) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy index 8a0c0eab..89d48c42 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/MainConfigReaderSpec.groovy @@ -22,12 +22,11 @@ import spock.lang.Specification class MainConfigReaderSpec extends Specification { - def "Read full config with inclusion"() { + MainConfigReader reader = new MainConfigReader(TestingCommons.fileResolver()) + + def "Read full config"() { setup: - // the File Resolver should be able to resolve/include files - MainConfigReader reader = new MainConfigReader(TestingCommons.fileResolver()) - // note that it references another config to be included - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-full.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-full.yaml") when: def act = reader.read(config) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/MonitoringConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/MonitoringConfigReaderSpec.groovy index eee026ca..a1fa8f67 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/MonitoringConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/MonitoringConfigReaderSpec.groovy @@ -23,7 +23,7 @@ class MonitoringConfigReaderSpec extends Specification { def "Read basic monitoring config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-monitoring-basic.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-monitoring-basic.yaml") when: def act = reader.read(config) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/ProxyConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/ProxyConfigReaderSpec.groovy index 473247df..8d2f827d 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/ProxyConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/ProxyConfigReaderSpec.groovy @@ -24,7 +24,7 @@ class ProxyConfigReaderSpec extends Specification { def "Read basic proxy config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-proxy-basic.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-proxy-basic.yaml") when: def act = reader.read(config) @@ -42,7 +42,7 @@ class ProxyConfigReaderSpec extends Specification { def "Read proxy config with websocket disabled"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-proxy-no-ws.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-proxy-no-ws.yaml") when: def act = reader.read(config) @@ -53,7 +53,7 @@ class ProxyConfigReaderSpec extends Specification { def "Read proxy config with two elements"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-proxy-two.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-proxy-two.yaml") when: def act = reader.read(config) @@ -73,7 +73,7 @@ class ProxyConfigReaderSpec extends Specification { def "Read max proxy config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/dshackle-proxy-max.yaml") + def config = this.class.getClassLoader().getResourceAsStream("dshackle-proxy-max.yaml") when: def act = reader.read(config) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy index d115c12e..5b4589a8 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy @@ -25,7 +25,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse standard config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-basic.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-basic.yaml") when: def act = reader.read(config) then: @@ -73,7 +73,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse websocket-only config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-ws-only.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-ws-only.yaml") when: def act = reader.read(config) then: @@ -98,7 +98,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse full defined websocket config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-ws-full.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-ws-full.yaml") when: def act = reader.read(config) then: @@ -125,7 +125,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse bitcoin upstreams"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-bitcoin.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-bitcoin.yaml") when: def act = reader.read(config) then: @@ -173,7 +173,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse bitcoin upstreams with esplora"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-bitcoin-esplora.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-bitcoin-esplora.yaml") when: def act = reader.read(config) then: @@ -202,7 +202,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse ds config"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-ds.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-ds.yaml") when: def act = reader.read(config) then: @@ -225,7 +225,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with labels"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-labels.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-labels.yaml") when: def act = reader.read(config) then: @@ -246,7 +246,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with options"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-options.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-options.yaml") when: def act = reader.read(config) then: @@ -262,7 +262,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config without defaults"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-no-defaults.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-no-defaults.yaml") when: def act = reader.read(config) then: @@ -285,7 +285,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with methods"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-methods.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-methods.yaml") when: def act = reader.read(config) then: @@ -305,7 +305,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with methods and quorum"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-methods-quorum.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-methods-quorum.yaml") when: def act = reader.read(config) then: @@ -328,7 +328,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with invalid ids"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-no-id.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-no-id.yaml") when: def act = reader.read(config) then: @@ -355,7 +355,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config without fallback role"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-basic.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-basic.yaml") when: def act = reader.read(config) then: @@ -367,7 +367,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with fallback role"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-roles.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-roles.yaml") when: def act = reader.read(config) then: @@ -379,7 +379,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with secondary role"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-roles-2.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-roles-2.yaml") when: def act = reader.read(config) then: @@ -392,7 +392,7 @@ class UpstreamsConfigReaderSpec extends Specification { def "Parse config with invalid role"() { setup: - def config = this.class.getClassLoader().getResourceAsStream("configs/upstreams-roles-invalid.yaml") + def config = this.class.getClassLoader().getResourceAsStream("upstreams-roles-invalid.yaml") when: def act = reader.read(config) then: diff --git a/src/test/groovy/io/emeraldpay/dshackle/rpc/NativeCallSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/rpc/NativeCallSpec.groovy index 8a45dc30..0f039786 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/rpc/NativeCallSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/rpc/NativeCallSpec.groovy @@ -34,8 +34,6 @@ import io.emeraldpay.dshackle.upstream.Selector import io.emeraldpay.dshackle.upstream.MultistreamHolder import io.emeraldpay.dshackle.upstream.calls.DefaultEthereumMethods import io.emeraldpay.dshackle.upstream.calls.ManagedCallMethods -import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcError -import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcException import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse import io.emeraldpay.dshackle.upstream.signature.ResponseSigner @@ -155,35 +153,6 @@ class NativeCallSpec extends Specification { .verify(Duration.ofSeconds(1)) } - def "Returns error details from remote"() { - setup: - def quorum = new AlwaysQuorum() - - def nativeCall = nativeCall() - nativeCall.quorumReaderFactory = Mock(QuorumReaderFactory) { - 1 * create(_, _, _) >> Mock(Reader) { - 1 * read(new JsonRpcRequest("eth_test", [], 10)) >> Mono.error( - new JsonRpcException(JsonRpcResponse.Id.from(12), new JsonRpcError(-32123, "Foo Bar", "Foo Bar Baz")) - ) - } - } - def call = new NativeCall.ValidCallContext(12, 10, TestingCommons.multistream(TestingCommons.api()), Selector.empty, quorum, - new NativeCall.ParsedCallDetails("eth_test", [])) - - when: - def resp = nativeCall.executeOnRemote(call).block(Duration.ofSeconds(1)) - then: - resp.isError() - with(resp.getError()) { - message == "Foo Bar" - upstreamError != null - with (upstreamError) { - code == -32123 - details == "Foo Bar Baz" - } - } - } - def "Packs call exception into response with id"() { setup: def nativeCall = nativeCall() diff --git a/src/test/groovy/io/emeraldpay/dshackle/test/MockGrpcServer.groovy b/src/test/groovy/io/emeraldpay/dshackle/test/MockGrpcServer.groovy index f1d3689f..3e046e9b 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/test/MockGrpcServer.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/test/MockGrpcServer.groovy @@ -26,6 +26,14 @@ class MockGrpcServer { GrpcCleanupRule grpcCleanup = new GrpcCleanupRule() + ReactorBlockchainGrpc.ReactorBlockchainStub clientForServer(ReactorBlockchainGrpc.BlockchainImplBase impl) { + String serverName = InProcessServerBuilder.generateName() + grpcCleanup.register(InProcessServerBuilder + .forName(serverName).directExecutor().addService(impl).build().start()); + def channel = grpcCleanup.register(InProcessChannelBuilder.forName(serverName).directExecutor().build()) + return ReactorBlockchainGrpc.newReactorStub(channel) + } + ReactorBlockchainGrpc.ReactorBlockchainStub clientForServer(BlockchainGrpc.BlockchainImplBase impl){ String serverName = InProcessServerBuilder.generateName() grpcCleanup.register(InProcessServerBuilder diff --git a/src/test/groovy/io/emeraldpay/dshackle/test/TestingCommons.groovy b/src/test/groovy/io/emeraldpay/dshackle/test/TestingCommons.groovy index a7405aa4..a6e4c114 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/test/TestingCommons.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/test/TestingCommons.groovy @@ -108,7 +108,7 @@ class TestingCommons { } static FileResolver fileResolver() { - return new FileResolver(new File("src/test/resources/configs")) + return new FileResolver(new File("src/test/resources")) } static BlockContainer blockForEthereum(Long height) { diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/ethereum/WsConnectionSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/ethereum/WsConnectionSpec.groovy index 54849052..18350845 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/ethereum/WsConnectionSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/ethereum/WsConnectionSpec.groovy @@ -92,7 +92,7 @@ class WsConnectionSpec extends Specification { it.id.asNumber() == 15L && Global.objectMapper.readValue(it.result, TransactionJson) == tx } .expectComplete() - .verify(Duration.ofSeconds(1)) + .verify(Duration.ofSeconds(5)) } def "Makes a RPC call - return null"() { @@ -115,7 +115,7 @@ class WsConnectionSpec extends Specification { it.resultAsRawString == 'null' } .expectComplete() - .verify(Duration.ofSeconds(1)) + .verify(Duration.ofSeconds(5)) } def "Makes a RPC call - return error"() { @@ -140,6 +140,6 @@ class WsConnectionSpec extends Specification { it.error.code == RpcResponseError.CODE_METHOD_NOT_EXIST && it.error.message == "test" } .expectComplete() - .verify(Duration.ofSeconds(1)) + .verify(Duration.ofSeconds(5)) } } diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClientSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClientSpec.groovy deleted file mode 100644 index 318a436f..00000000 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcGrpcClientSpec.groovy +++ /dev/null @@ -1,88 +0,0 @@ -package io.emeraldpay.dshackle.upstream.rpcclient - -import com.google.protobuf.ByteString -import io.emeraldpay.api.proto.BlockchainGrpc -import io.emeraldpay.api.proto.BlockchainOuterClass -import io.emeraldpay.api.proto.Common -import io.emeraldpay.dshackle.test.MockGrpcServer -import io.emeraldpay.dshackle.upstream.Selector -import io.emeraldpay.etherjar.rpc.RpcException -import io.emeraldpay.etherjar.rpc.RpcResponseError -import io.emeraldpay.dshackle.Chain -import io.grpc.stub.StreamObserver -import spock.lang.Specification - -import java.time.Duration -import java.util.concurrent.atomic.AtomicReference - -class JsonRpcGrpcClientSpec extends Specification { - - def "Makes a request"() { - setup: - def mockGrpc = new MockGrpcServer() - def requested = new AtomicReference() - - def grpc = mockGrpc.clientForServer(new BlockchainGrpc.BlockchainImplBase() { - @Override - void nativeCall(BlockchainOuterClass.NativeCallRequest request, StreamObserver responseObserver) { - requested.set(request) - responseObserver.onNext(BlockchainOuterClass.NativeCallReplyItem.newBuilder() - .setId(1) - .setSucceed(true) - .setPayload(ByteString.copyFromUtf8("\"hello world!\"")) - .build()) - responseObserver.onCompleted() - } - }) - def client = new JsonRpcGrpcClient( - grpc, Chain.BITCOIN, null - ).getReader() - - when: - def act = client.read( - new JsonRpcRequest("test", []) - ).block(Duration.ofSeconds(1)) - - then: - !act.hasError() - act.resultAsProcessedString == "hello world!" - - requested.get() == BlockchainOuterClass.NativeCallRequest.newBuilder() - .setChain(Common.ChainRef.CHAIN_BITCOIN) - .addAllItems([ - BlockchainOuterClass.NativeCallItem.newBuilder() - .setId(1) - .setMethod("test") - .setPayload(ByteString.copyFromUtf8("[]")) - .build() - ]) - .build() - } - - def "Return error on HTTP error"() { - setup: - def mockGrpc = new MockGrpcServer() - def grpc = mockGrpc.clientForServer(new BlockchainGrpc.BlockchainImplBase() { - @Override - void nativeCall(BlockchainOuterClass.NativeCallRequest request, StreamObserver responseObserver) { - responseObserver.onError(new IllegalStateException("fail")) - } - }) - def client = new JsonRpcGrpcClient( - grpc, Chain.BITCOIN, null - ).getReader() - - when: - client.read( - new JsonRpcRequest("test", []) - ).block(Duration.ofSeconds(1)) - - then: - def t = thrown(RpcException) - with(t.error) { - message == "Remote status code: UNKNOWN" - it.code == RpcResponseError.CODE_UPSTREAM_CONNECTION_ERROR - } - - } -} diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClientSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClientSpec.groovy index 549e81fe..1e02cdc1 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClientSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/JsonRpcHttpClientSpec.groovy @@ -26,7 +26,6 @@ import org.mockserver.model.HttpRequest import org.mockserver.model.HttpResponse import org.mockserver.model.MediaType import org.springframework.util.SocketUtils -import reactor.core.Exceptions import reactor.test.StepVerifier import spock.lang.Specification @@ -85,7 +84,7 @@ class JsonRpcHttpClientSpec extends Specification { .withBody("pong") ) when: - def act = client.execute("ping".bytes).map { new String(it.t2) } + def act = client.execute("ping".bytes).map { new String(it) } then: StepVerifier.create(act) .expectNext("pong") @@ -112,44 +111,13 @@ class JsonRpcHttpClientSpec extends Specification { .withBody("pong") ) when: - def act = client.read( - new JsonRpcRequest("ping", []) - ).block(Duration.ofSeconds(1)) + def act = client.execute("ping".bytes).map { new String(it) } then: - def t = thrown(RuntimeException) // reactor.core.Exceptions$ReactiveException - t.cause instanceof JsonRpcException - with(((JsonRpcException)t.cause).error) { - code == RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE - message == "HTTP Code: 500" - } - } - - def "Tries to extract message if HTTP error if it still contains a JSON RPC message"() { - setup: - def client = new JsonRpcHttpClient("localhost:${port}", metrics, null, null) - - mockServer.when( - HttpRequest.request() - ).respond( - HttpResponse.response() - .withStatusCode(500) - .withBody('{' + - '"jsonrpc": "2.0", ' + - '"id": 1, ' + - '"error": {"code": -32603, "message": "Something happened"}' + - '}') - ) - when: - def act = client.read( - new JsonRpcRequest("ping", []) - ).block(Duration.ofSeconds(1)) - then: - def t = thrown(RuntimeException) // reactor.core.Exceptions$ReactiveException - t.cause instanceof JsonRpcException - with(((JsonRpcException)t.cause).error) { - code == -32603 - message == "Something happened" - } + StepVerifier.create(act) + .expectErrorMatches { t -> + t instanceof JsonRpcException && t.error.code == RpcResponseError.CODE_UPSTREAM_INVALID_RESPONSE + } + .verify(Duration.ofSeconds(1)) } } diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseRpcParserSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseRpcParserSpec.groovy index a7e23694..f2f3542d 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseRpcParserSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseRpcParserSpec.groovy @@ -223,27 +223,4 @@ class ResponseRpcParserSpec extends Specification { !act.hasResult() } - def "Keep provided ID even if JSON is not full"() { - setup: - def json = '{"jsonrpc": "2.0", "id": 1}' - when: - def act = parser.parse(json.getBytes()) - then: - act.id.asNumber() == 1 - act.error != null - act.hasError() - !act.hasResult() - } - - def "Keep provided ID even if JSON is broken"() { - setup: - def json = '{"jsonrpc": "2.0", "id": 101, "resu' - when: - def act = parser.parse(json.getBytes()) - then: - act.id.asNumber() == 101 - act.error != null - act.hasError() - !act.hasResult() - } } diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParserSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParserSpec.groovy index f2dab053..460e5e02 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParserSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/rpcclient/ResponseWSParserSpec.groovy @@ -103,24 +103,4 @@ class ResponseWSParserSpec extends Specification { act.error == null new String(act.value) == "null" } - - def "Keep provided ID even if JSON is not full"() { - setup: - def json = '{"jsonrpc": "2.0", "id": 1}' - when: - def act = parser.parse(json.getBytes()) - then: - act.id.asNumber() == 1 - act.error != null - } - - def "Keep provided ID even if JSON is broken"() { - setup: - def json = '{"jsonrpc": "2.0", "id": 101, "resu' - when: - def act = parser.parse(json.getBytes()) - then: - act.id.asNumber() == 101 - act.error != null - } } diff --git a/src/test/groovy/io/emeraldpay/dshackle/upstream/signature/EcdsaSignerSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/upstream/signature/EcdsaSignerSpec.groovy index 98a8acbb..668b5abc 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/upstream/signature/EcdsaSignerSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/upstream/signature/EcdsaSignerSpec.groovy @@ -49,7 +49,7 @@ class EcdsaSignerSpec extends Specification { setup: def conf = new SignatureConfig() conf.enabled = true - conf.privateKey = "src/test/resources/signer/test_key" + conf.privateKey = "testing/dshackle/test_key" def signer = new ResponseSignerFactory(conf).getObject() as EcdsaSigner // To verify the test, check the hash of test key above: @@ -114,7 +114,7 @@ class EcdsaSignerSpec extends Specification { def conf = new SignatureConfig() conf.enabled = true - conf.privateKey = "src/test/resources/signer/test_key" + conf.privateKey = "testing/dshackle/test_key" def factory = new ResponseSignerFactory(conf) def sk = factory.readKey(conf.algorithm, conf.privateKey).first diff --git a/src/test/resources/configs/cache-redis-disabled.yaml b/src/test/resources/cache-redis-disabled.yaml similarity index 100% rename from src/test/resources/configs/cache-redis-disabled.yaml rename to src/test/resources/cache-redis-disabled.yaml diff --git a/src/test/resources/configs/cache-redis-full.yaml b/src/test/resources/cache-redis-full.yaml similarity index 100% rename from src/test/resources/configs/cache-redis-full.yaml rename to src/test/resources/cache-redis-full.yaml diff --git a/src/test/resources/configs/upstreams-priority.yaml b/src/test/resources/configs/upstreams-priority.yaml deleted file mode 100644 index 2a165754..00000000 --- a/src/test/resources/configs/upstreams-priority.yaml +++ /dev/null @@ -1,26 +0,0 @@ -version: v1 - -upstreams: - - - id: local - chain: ethereum - priority: 100 - connection: - ethereum: - rpc: - url: "http://localhost:8545" - - - id: infura - chain: ethereum - role: fallback - priority: 50 - connection: - ethereum: - rpc: - url: "https://mainnet.infura.io/v3/fa28c968191849c1aff541ad1d8511f2" - - - id: remote - priority: 75 - connection: - grpc: - host: "10.2.0.15" \ No newline at end of file diff --git a/src/test/resources/configs/dshackle-full.yaml b/src/test/resources/dshackle-full.yaml similarity index 100% rename from src/test/resources/configs/dshackle-full.yaml rename to src/test/resources/dshackle-full.yaml diff --git a/src/test/resources/configs/dshackle-health-1.yaml b/src/test/resources/dshackle-health-1.yaml similarity index 100% rename from src/test/resources/configs/dshackle-health-1.yaml rename to src/test/resources/dshackle-health-1.yaml diff --git a/src/test/resources/configs/dshackle-health-2.yaml b/src/test/resources/dshackle-health-2.yaml similarity index 100% rename from src/test/resources/configs/dshackle-health-2.yaml rename to src/test/resources/dshackle-health-2.yaml diff --git a/src/test/resources/configs/dshackle-health-empty.yaml b/src/test/resources/dshackle-health-empty.yaml similarity index 100% rename from src/test/resources/configs/dshackle-health-empty.yaml rename to src/test/resources/dshackle-health-empty.yaml diff --git a/src/test/resources/configs/dshackle-monitoring-basic.yaml b/src/test/resources/dshackle-monitoring-basic.yaml similarity index 100% rename from src/test/resources/configs/dshackle-monitoring-basic.yaml rename to src/test/resources/dshackle-monitoring-basic.yaml diff --git a/src/test/resources/configs/dshackle-proxy-basic.yaml b/src/test/resources/dshackle-proxy-basic.yaml similarity index 100% rename from src/test/resources/configs/dshackle-proxy-basic.yaml rename to src/test/resources/dshackle-proxy-basic.yaml diff --git a/src/test/resources/configs/dshackle-proxy-max.yaml b/src/test/resources/dshackle-proxy-max.yaml similarity index 100% rename from src/test/resources/configs/dshackle-proxy-max.yaml rename to src/test/resources/dshackle-proxy-max.yaml diff --git a/src/test/resources/configs/dshackle-proxy-no-ws.yaml b/src/test/resources/dshackle-proxy-no-ws.yaml similarity index 100% rename from src/test/resources/configs/dshackle-proxy-no-ws.yaml rename to src/test/resources/dshackle-proxy-no-ws.yaml diff --git a/src/test/resources/configs/dshackle-proxy-two.yaml b/src/test/resources/dshackle-proxy-two.yaml similarity index 100% rename from src/test/resources/configs/dshackle-proxy-two.yaml rename to src/test/resources/dshackle-proxy-two.yaml diff --git a/src/test/resources/configs/upstreams-basic.yaml b/src/test/resources/upstreams-basic.yaml similarity index 100% rename from src/test/resources/configs/upstreams-basic.yaml rename to src/test/resources/upstreams-basic.yaml diff --git a/src/test/resources/configs/upstreams-bitcoin-esplora.yaml b/src/test/resources/upstreams-bitcoin-esplora.yaml similarity index 100% rename from src/test/resources/configs/upstreams-bitcoin-esplora.yaml rename to src/test/resources/upstreams-bitcoin-esplora.yaml diff --git a/src/test/resources/configs/upstreams-bitcoin.yaml b/src/test/resources/upstreams-bitcoin.yaml similarity index 100% rename from src/test/resources/configs/upstreams-bitcoin.yaml rename to src/test/resources/upstreams-bitcoin.yaml diff --git a/src/test/resources/configs/upstreams-ds.yaml b/src/test/resources/upstreams-ds.yaml similarity index 100% rename from src/test/resources/configs/upstreams-ds.yaml rename to src/test/resources/upstreams-ds.yaml diff --git a/src/test/resources/configs/upstreams-extra.yaml b/src/test/resources/upstreams-extra.yaml similarity index 100% rename from src/test/resources/configs/upstreams-extra.yaml rename to src/test/resources/upstreams-extra.yaml diff --git a/src/test/resources/configs/upstreams-labels.yaml b/src/test/resources/upstreams-labels.yaml similarity index 100% rename from src/test/resources/configs/upstreams-labels.yaml rename to src/test/resources/upstreams-labels.yaml diff --git a/src/test/resources/configs/upstreams-methods-quorum.yaml b/src/test/resources/upstreams-methods-quorum.yaml similarity index 100% rename from src/test/resources/configs/upstreams-methods-quorum.yaml rename to src/test/resources/upstreams-methods-quorum.yaml diff --git a/src/test/resources/configs/upstreams-methods.yaml b/src/test/resources/upstreams-methods.yaml similarity index 100% rename from src/test/resources/configs/upstreams-methods.yaml rename to src/test/resources/upstreams-methods.yaml diff --git a/src/test/resources/configs/upstreams-no-defaults.yaml b/src/test/resources/upstreams-no-defaults.yaml similarity index 100% rename from src/test/resources/configs/upstreams-no-defaults.yaml rename to src/test/resources/upstreams-no-defaults.yaml diff --git a/src/test/resources/configs/upstreams-no-id.yaml b/src/test/resources/upstreams-no-id.yaml similarity index 100% rename from src/test/resources/configs/upstreams-no-id.yaml rename to src/test/resources/upstreams-no-id.yaml diff --git a/src/test/resources/configs/upstreams-options.yaml b/src/test/resources/upstreams-options.yaml similarity index 100% rename from src/test/resources/configs/upstreams-options.yaml rename to src/test/resources/upstreams-options.yaml diff --git a/src/test/resources/configs/upstreams-roles-2.yaml b/src/test/resources/upstreams-roles-2.yaml similarity index 100% rename from src/test/resources/configs/upstreams-roles-2.yaml rename to src/test/resources/upstreams-roles-2.yaml diff --git a/src/test/resources/configs/upstreams-roles-invalid.yaml b/src/test/resources/upstreams-roles-invalid.yaml similarity index 100% rename from src/test/resources/configs/upstreams-roles-invalid.yaml rename to src/test/resources/upstreams-roles-invalid.yaml diff --git a/src/test/resources/configs/upstreams-roles.yaml b/src/test/resources/upstreams-roles.yaml similarity index 100% rename from src/test/resources/configs/upstreams-roles.yaml rename to src/test/resources/upstreams-roles.yaml diff --git a/src/test/resources/configs/upstreams-ws-full.yaml b/src/test/resources/upstreams-ws-full.yaml similarity index 100% rename from src/test/resources/configs/upstreams-ws-full.yaml rename to src/test/resources/upstreams-ws-full.yaml diff --git a/src/test/resources/configs/upstreams-ws-only.yaml b/src/test/resources/upstreams-ws-only.yaml similarity index 100% rename from src/test/resources/configs/upstreams-ws-only.yaml rename to src/test/resources/upstreams-ws-only.yaml diff --git a/testing/.gitignore b/testing/.gitignore new file mode 100644 index 00000000..e5a210d4 --- /dev/null +++ b/testing/.gitignore @@ -0,0 +1,3 @@ +gradlew +gradlew.bat +gradle/ \ No newline at end of file diff --git a/testing/README.adoc b/testing/README.adoc new file mode 100644 index 00000000..8027d983 --- /dev/null +++ b/testing/README.adoc @@ -0,0 +1,104 @@ += Dshackle Integration Testing + +Test for a correct work using a simulation of different upstream behaviours and checking the Dshackle against it. + +.Modules: +- `dshackle` - Dshackle config used for testing environment +- `simple-upstream` - upstream simulator with predefines responses +- `trial` - actual tests + +== How to run + +NOTE: Run commands in project's root dir + +NOTE: You need to open multiple consoles, since each command runs on foreground + +== Basic Test + +Makes some basic checks with a mocked upstreams + +=== Run upstream emulator + +.Runs two instances of RPC server +[source,bash] +---- +DSHACKLE_TESTUP_PORT=18545 ./gradlew -p testing/simple-upstream run +DSHACKLE_TESTUP_PORT=18546 ./gradlew -p testing/simple-upstream run +---- + +=== Run Dshackle + +[source,bash] +---- +./gradlew run --args="--configPath=./testing/dshackle/dshackle-basic.yaml" +---- + +=== Run tests + +[source,bash] +---- +./testing/trial/gradlew -p testing/trial -PdshackleTrialMode=basic cleanTest test +---- + +== Real (Mainnet) Test + +=== Run Dshackle + +First you have to provide configuration to an upstream connected to the mainnet. +It may be a local Geth instance, or an other provider, like Infura (note that the test config doesn't support TLS or other auth) + +[source,bash] +---- +export DSHACKLE_TEST_ETH1_RPC= +export DSHACKLE_TEST_ETH1_WS= +export DSHACKLE_TEST_ETH1_WSORIGIN= +---- + +For a local Geth it would be: + +[source,bash] +---- +export DSHACKLE_TEST_ETH1_RPC=http://127.0.0.1:8545 +export DSHACKLE_TEST_ETH1_WS=ws://127.0.0.1:8546 +export DSHACKLE_TEST_ETH1_WSORIGIN=http://127.0.0.1:8546 +---- + +Finally, run the Dshackle instance: + +[source,bash] +---- +./gradlew run --args="--configPath=./testing/dshackle/dshackle-real.yaml" +---- + +=== Run tests + +[source,bash] +---- +./testing/trial/gradlew -p testing/trial -PdshackleTrialMode=real cleanTest test +---- + +== Real (Rinkeby) Test + +Runs requests against a Rinkeby Testnet. +Configuration is similar to the Mainnet config, but instead of `ETH1` is has `RINKEBY`. + +[source,bash] +---- +export DSHACKLE_TEST_RINKEBY_RPC= +export DSHACKLE_TEST_RINKEBY_WS= +export DSHACKLE_TEST_RINKEBY_WSORIGIN= +---- + +And run the Dshackle instance: + +[source,bash] +---- +./gradlew run --args="--configPath=./testing/dshackle/dshackle-rinkeby.yaml" +---- + +=== Run tests + +[source,bash] +---- +./testing/trial/gradlew -p testing/trial -PdshackleTrialMode=rinkeby cleanTest test +---- diff --git a/testing/dshackle/README.adoc b/testing/dshackle/README.adoc new file mode 100644 index 00000000..46dc3bc3 --- /dev/null +++ b/testing/dshackle/README.adoc @@ -0,0 +1,14 @@ += Testing Server + +.Run from project root directory: +[source,bash] +---- +./gradlew run --args="--configPath=./testing/dshackle/dshackle-mock.yaml" +---- + +or + +[source,bash] +---- +./gradlew run --args="--configPath=./testing/dshackle/dshackle-real.yaml" +---- diff --git a/testing/dshackle/dshackle-basic.yaml b/testing/dshackle/dshackle-basic.yaml new file mode 100644 index 00000000..56515c78 --- /dev/null +++ b/testing/dshackle/dshackle-basic.yaml @@ -0,0 +1,50 @@ +version: v1 +port: 12448 + +tls: + enabled: false + +cluster: + upstreams: + - id: test-1 + node-id: 1 + chain: ethereum + methods: + enabled: + - name: debug_traceTransaction + - name: test_foo + options: + disable-validation: true + connection: + ethereum-pos: + execution: + rpc: + url: "http://localhost:18545" + + - id: test-2 + node-id: 2 + chain: ethereum + options: + disable-validation: true + connection: + execution: + ethereum-pos: + rpc: + url: "http://localhost:18546" + +cache: + redis: + enabled: false + +signed-response: + enabled: true + algorithm: SECP256K1 + private-key: "./test_key" + +proxy: + port: 18080 + tls: + enabled: false + routes: + - id: eth + blockchain: ethereum \ No newline at end of file diff --git a/testing/dshackle/dshackle-real.yaml b/testing/dshackle/dshackle-real.yaml new file mode 100644 index 00000000..a8e289f0 --- /dev/null +++ b/testing/dshackle/dshackle-real.yaml @@ -0,0 +1,30 @@ +version: v1 +port: 12448 + +tls: + enabled: false + +cluster: + upstreams: + - id: eth-1 + chain: ethereum + connection: + ethereum: + rpc: + url: "${DSHACKLE_TEST_ETH1_RPC}" + ws: + url: "${DSHACKLE_TEST_ETH1_WS}" + origin: "${DSHACKLE_TEST_ETH1_WSORIGIN}" + +cache: + redis: + enabled: false + +proxy: + port: 18081 + preserve-batch-order: true + tls: + enabled: false + routes: + - id: eth + blockchain: ethereum \ No newline at end of file diff --git a/testing/dshackle/dshackle-rinkeby.yaml b/testing/dshackle/dshackle-rinkeby.yaml new file mode 100644 index 00000000..e0e1d3a8 --- /dev/null +++ b/testing/dshackle/dshackle-rinkeby.yaml @@ -0,0 +1,26 @@ +version: v1 +port: 12448 + +tls: + enabled: false + +cluster: + upstreams: + - id: rinkeby-1 + chain: rinkeby + connection: + ethereum: + rpc: + url: "${DSHACKLE_TEST_RINKEBY_RPC}" + +cache: + redis: + enabled: false + +proxy: + port: 18081 + tls: + enabled: false + routes: + - id: rinkeby + blockchain: rinkeby \ No newline at end of file diff --git a/src/test/resources/signer/test_key b/testing/dshackle/test_key similarity index 100% rename from src/test/resources/signer/test_key rename to testing/dshackle/test_key diff --git a/src/test/resources/signer/test_key.pub b/testing/dshackle/test_key.pub similarity index 100% rename from src/test/resources/signer/test_key.pub rename to testing/dshackle/test_key.pub diff --git a/testing/simple-upstream/README.adoc b/testing/simple-upstream/README.adoc new file mode 100644 index 00000000..caab006c --- /dev/null +++ b/testing/simple-upstream/README.adoc @@ -0,0 +1,6 @@ += Simple Testing Upstream + +.Run from current directory +---- +./gradlew run +---- \ No newline at end of file diff --git a/testing/simple-upstream/build.gradle b/testing/simple-upstream/build.gradle new file mode 100644 index 00000000..72b72e50 --- /dev/null +++ b/testing/simple-upstream/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'groovy' + id 'idea' + id 'application' +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation "com.sparkjava:spark-core:2.9.1" + implementation "org.codehaus.groovy:groovy:3.0.4" + implementation "com.fasterxml.jackson.core:jackson-core:2.9.8" + implementation "com.fasterxml.jackson.core:jackson-databind:2.9.8" +} + +application { + mainClassName = 'testing.SimpleUpstream' +} \ No newline at end of file diff --git a/testing/simple-upstream/settings.gradle b/testing/simple-upstream/settings.gradle new file mode 100644 index 00000000..faa039c6 --- /dev/null +++ b/testing/simple-upstream/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'dshackle-testing-simple-upstream' \ No newline at end of file diff --git a/testing/simple-upstream/src/main/groovy/testing/BlocksHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/BlocksHandler.groovy new file mode 100644 index 00000000..11526f97 --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/BlocksHandler.groovy @@ -0,0 +1,32 @@ +package testing + +import com.fasterxml.jackson.databind.ObjectMapper + +class BlocksHandler implements CallHandler { + + ObjectMapper objectMapper + ResourceResponse resourceResponse + + BlocksHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper + this.resourceResponse = new ResourceResponse(objectMapper) + } + + @Override + Result handle(String method, List params) { + if (method == "eth_blockNumber") { + return Result.ok("0x100001") + } + if (method == "eth_getBlockByNumber") { + String blockId = params[0] + println("get block $blockId") + return resourceResponse.respondWith("block-${blockId}.json") + } + if (method == "eth_getTransactionByHash") { + String txId = params[0] + return resourceResponse.respondWith("tx-${txId}.json") + } + return null + } + +} diff --git a/testing/simple-upstream/src/main/groovy/testing/CallHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/CallHandler.groovy new file mode 100644 index 00000000..2eb2366f --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/CallHandler.groovy @@ -0,0 +1,48 @@ +package testing + +interface CallHandler { + + Result handle(String method, List params) + + static class Result { + private Object result + private Integer errorCode + private String errorMessage + private Object errorDetails + + Result(Object result, Integer errorCode, String errorMessage, Object errorDetails) { + this.result = result + this.errorCode = errorCode + this.errorMessage = errorMessage + this.errorDetails = errorDetails + } + + static Result ok(Object result) { + return new Result(result, null, null, null) + } + + static Result error(int errorCode, String errorMessage, Object details = null) { + return new Result(null, errorCode, errorMessage, details) + } + + boolean isResult() { + return errorCode == null + } + + Object getResult() { + return result + } + + int getErrorCode() { + return errorCode + } + + String getErrorMessage() { + return errorMessage + } + + Object getErrorDetails() { + return errorDetails + } + } +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/groovy/testing/CommonHandlers.groovy b/testing/simple-upstream/src/main/groovy/testing/CommonHandlers.groovy new file mode 100644 index 00000000..cdfdec03 --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/CommonHandlers.groovy @@ -0,0 +1,25 @@ +package testing + +import com.fasterxml.jackson.databind.ObjectMapper + +class CommonHandlers implements CallHandler { + + ObjectMapper objectMapper + ResourceResponse resourceResponse + + CommonHandlers(ObjectMapper objectMapper) { + this.objectMapper = objectMapper + this.resourceResponse = new ResourceResponse(objectMapper) + } + + @Override + Result handle(String method, List params) { + if (method == "eth_syncing") { + return Result.ok(false) + } + if (method == "eth_chainId") { + return resourceResponse.respondWith("chain-id.json") + } + return null + } +} diff --git a/testing/simple-upstream/src/main/groovy/testing/InternalHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/InternalHandler.groovy new file mode 100644 index 00000000..9fe926aa --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/InternalHandler.groovy @@ -0,0 +1,35 @@ +package testing + +import java.time.Instant +import java.util.concurrent.atomic.AtomicInteger + +class InternalHandler implements CallHandler { + + private AtomicInteger ids = new AtomicInteger() + private List requests = new ArrayList() + + def record(String json) { + requests << new Item(ids.getAndIncrement(), json) + } + + @Override + Result handle(String method, List params) { + if (method == "eth_call" + && params[0].to?.toLowerCase() == "0x0123456789abcdef0123456789abcdef00000002".toLowerCase()) { + return Result.ok(Collections.unmodifiableList(requests)) + } + return null + } + + class Item { + Integer id + String timestamp + String json + + Item(Integer id, String json) { + this.id = id + this.timestamp = Instant.now().toString() + this.json = json + } + } +} diff --git a/testing/simple-upstream/src/main/groovy/testing/InvalidCallHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/InvalidCallHandler.groovy new file mode 100644 index 00000000..a2c6c4b0 --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/InvalidCallHandler.groovy @@ -0,0 +1,8 @@ +package testing + +class InvalidCallHandler implements CallHandler { + @Override + Result handle(String method, List params) { + return Result.error(-32000, "Call is not supported") + } +} diff --git a/testing/simple-upstream/src/main/groovy/testing/PingPongHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/PingPongHandler.groovy new file mode 100644 index 00000000..9babfbd6 --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/PingPongHandler.groovy @@ -0,0 +1,12 @@ +package testing + +class PingPongHandler implements CallHandler { + @Override + Result handle(String method, List params) { + if (method == "eth_call" + && params[0].to?.toLowerCase() == "0x0123456789abcdef0123456789abcdef00000001".toLowerCase()) { + return Result.ok([data: params[0].data]) + } + return null + } +} diff --git a/testing/simple-upstream/src/main/groovy/testing/ResourceResponse.groovy b/testing/simple-upstream/src/main/groovy/testing/ResourceResponse.groovy new file mode 100644 index 00000000..46a1084b --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/ResourceResponse.groovy @@ -0,0 +1,25 @@ +package testing + +import com.fasterxml.jackson.databind.ObjectMapper + +class ResourceResponse { + + ObjectMapper objectMapper + + ResourceResponse(ObjectMapper objectMapper) { + this.objectMapper = objectMapper + } + + Object getResource(String name) { + String json = BlocksHandler.class.getResourceAsStream("/" + name)?.text + if (json == null) { + return null + } + return objectMapper.readValue(json, Map) + } + + CallHandler.Result respondWith(String name) { + return CallHandler.Result.ok(getResource(name)) + } + +} diff --git a/testing/simple-upstream/src/main/groovy/testing/SimpleUpstream.groovy b/testing/simple-upstream/src/main/groovy/testing/SimpleUpstream.groovy new file mode 100644 index 00000000..b1af5642 --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/SimpleUpstream.groovy @@ -0,0 +1,73 @@ +package testing + +import com.fasterxml.jackson.databind.ObjectMapper +import spark.Spark + +class SimpleUpstream { + + private int port = System.getenv("DSHACKLE_TESTUP_PORT")?.toInteger() ?: 18545 + private ObjectMapper objectMapper + + private List handlers = [] + private InternalHandler internalHandler + + void prepare() { + objectMapper = new ObjectMapper() + + internalHandler = new InternalHandler() + + handlers << new TestcaseHandler(objectMapper) + handlers << new CommonHandlers(objectMapper) + handlers << new BlocksHandler(objectMapper) + handlers << new PingPongHandler() + handlers << internalHandler + + handlers << new InvalidCallHandler() + } + + void start() { + println("Starting upstream on 0.0.0.0:$port") + Spark.port(port) + Spark.post("/") { req, resp -> + try { + def requestBody = req.body() + println("request: $requestBody") + internalHandler.record(requestBody) + Map json = objectMapper.readValue(requestBody, Map) + def id = json["id"] + String method = json["method"].toString() + List params = json.containsKey("params") ? json["params"] as List : [] + + CallHandler.Result result = handlers.findResult { h -> + return h.handle(method, params) + } + Map resultJson = [ + id : id, + jsonrpc: "2.0" + ] + if (result.isResult()) { + resultJson["result"] = result.result + } else { + resultJson["error"] = [ + code : result.getErrorCode(), + message: result.getErrorMessage() + ] + if (result.getErrorDetails() != null) { + resultJson["error"]["data"] = result.getErrorDetails() + } + } + resp.status(200) + resp.header("content-type", "application/json") + return objectMapper.writeValueAsString(resultJson) + } catch (Throwable t) { + t.printStackTrace() + } + } + } + + public static void main(String[] args) { + def server = new SimpleUpstream() + server.prepare() + server.start() + } +} diff --git a/testing/simple-upstream/src/main/groovy/testing/TestcaseHandler.groovy b/testing/simple-upstream/src/main/groovy/testing/TestcaseHandler.groovy new file mode 100644 index 00000000..1f7dfbdd --- /dev/null +++ b/testing/simple-upstream/src/main/groovy/testing/TestcaseHandler.groovy @@ -0,0 +1,44 @@ +package testing + +import com.fasterxml.jackson.databind.ObjectMapper + +class TestcaseHandler implements CallHandler { + + ObjectMapper objectMapper + ResourceResponse resourceResponse + + TestcaseHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper + this.resourceResponse = new ResourceResponse(objectMapper) + } + + @Override + Result handle(String method, List params) { + // https://github.com/emeraldpay/dshackle/issues/35 + if (method == "eth_call" + && params[0].to?.toLowerCase() == "0x542156d51D10Db5acCB99f9Db7e7C91B74E80a2c".toLowerCase()) { + return Result.error(-32015, "VM execution error.") + } + // https://github.com/emeraldpay/dshackle/issues/35 (second) + if (method == "eth_call" + && params[0].to?.toLowerCase() == "0x8ee2a5aca4f88cb8c757b8593d0734855dcc0eba".toLowerCase()) { + return Result.error(-32015, "VM execution error.", "revert: SafeMath: division by zero") + } + // https://github.com/emeraldpay/dshackle/issues/43 + if (method == "debug_traceTransaction" + && params[0].toLowerCase() == "0xd949bc0fe1a5d16f4522bc47933554dcc4ada0493ff71ee1973b2410257af9fe".toLowerCase()) { + return resourceResponse.respondWith("trace-0xd949bc.json") + } + // https://github.com/emeraldpay/dshackle/issues/67 + if (method == "eth_call" + && params[0].to?.toLowerCase() == "0xdAC17F958D2ee523a2206206994597C13D831ec7".toLowerCase()) { + return Result.error(-32000, "invalid opcode: opcode 0xfe not defined") + } + // https://github.com/emeraldpay/dshackle/issues/67, when a custom method configured + if (method == "test_foo" + && params[0].to?.toLowerCase() == "0xdAC17F958D2ee523a2206206994597C13D831ec7".toLowerCase()) { + return Result.error(-32000, "invalid opcode: opcode 0xfe not defined") + } + return null + } +} diff --git a/testing/simple-upstream/src/main/resources/block-0x100000.json b/testing/simple-upstream/src/main/resources/block-0x100000.json new file mode 100644 index 00000000..de58ca1b --- /dev/null +++ b/testing/simple-upstream/src/main/resources/block-0x100000.json @@ -0,0 +1,25 @@ +{ + "difficulty": "0xc6d2fa46fd6", + "extraData": "0xd783010400844765746887676f312e352e31856c696e7578", + "gasLimit": "0x2fefd8", + "gasUsed": "0xa410", + "hash": "0x9a834c53bbee9c2665a5a84789a1d1ad73750b2d77b50de44f457f411d02e52e", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x68795c4aa09d6f4ed3e5deddf8c2ad3049a601da", + "mixHash": "0x72224fd0b7b32d0fea13f2953eba28d2512af43632725ed75583dd30e42dfc64", + "nonce": "0xf1a453a44f9de627", + "number": "0x100000", + "parentHash": "0x2dcaf9a8a3fd329d925eb47c1f22022d4f2d562500e546d878bad4247d013858", + "receiptsRoot": "0x178000485de197ed06a4ebada431864e5b564b43f994fb8888521f74b4b3257b", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x303", + "stateRoot": "0xeaddaa0b6b673ba3f8cb7235ca656340ccf703295cf5252cb04a4202c47252c2", + "timestamp": "0x56cc7b73", + "totalDifficulty": "0x6bab93cdf810b22a", + "transactions": [ + "0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa", + "0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0" + ], + "transactionsRoot": "0x91d9b419b34a790cc2a7d59c6b95e57ccc5ec9bc1034ce9510dfb551d3049c93", + "uncles": [] +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/block-0x100001.json b/testing/simple-upstream/src/main/resources/block-0x100001.json new file mode 100644 index 00000000..0fca9d14 --- /dev/null +++ b/testing/simple-upstream/src/main/resources/block-0x100001.json @@ -0,0 +1,26 @@ +{ + "difficulty": "0xc6ba1fe7c49", + "extraData": "0xd783010400844765746887676f312e352e31856c696e7578", + "gasLimit": "0x2fefd8", + "gasUsed": "0xa410", + "hash": "0x18c68d9ba58772a4409d65d61891b25db03a105a7769ae08ef2cff697921b446", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x0c729be7c39543c3d549282a40395299d987cec2", + "mixHash": "0xf8679fe0f04d5aad4844694cc8fb1a1b97482a5822658379c9bb8633f91daf97", + "nonce": "0x347a267c0ec88618", + "number": "0x100001", + "parentHash": "0x9a834c53bbee9c2665a5a84789a1d1ad73750b2d77b50de44f457f411d02e52e", + "receiptsRoot": "0x4f4ed1139baadbd4506d6b0c330335d2108715095fb93fd282bd69aa9edc09eb", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x304", + "stateRoot": "0xee13382462fcd5748a403ca131c38e871fa7206bca2b962f67b59e800741daa3", + "timestamp": "0x56cc7b8c", + "totalDifficulty": "0x6baba0399a0f2e73", + "transactions": [ + "0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77", + "0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e" + ], + "transactionsRoot": "0xc90078e2af52aef81815cb2a71c22ebd781dd658dd953d9df57f7769a0b2fe51", + "uncles": [], + "testFoo": "bar" +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/chain-id.json b/testing/simple-upstream/src/main/resources/chain-id.json new file mode 100644 index 00000000..c318e9d3 --- /dev/null +++ b/testing/simple-upstream/src/main/resources/chain-id.json @@ -0,0 +1,5 @@ +{ + "id": 83, + "jsonrpc": "2.0", + "result": "0x3d" +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/trace-0xd949bc.json b/testing/simple-upstream/src/main/resources/trace-0xd949bc.json new file mode 100644 index 00000000..d3f56e8a --- /dev/null +++ b/testing/simple-upstream/src/main/resources/trace-0xd949bc.json @@ -0,0 +1,6966 @@ +{ + "jsonrpc": "2.0", + "result": { + "gas": "0x75a2", + "failed": false, + "returnValue": "0x", + "structLogs": [ + { + "pc": 0, + "op": "PUSH1", + "gas": 410732, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [], + "memory": [], + "storage": {} + }, + { + "pc": 2, + "op": "PUSH1", + "gas": 410729, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "memory": [], + "storage": {} + }, + { + "pc": 4, + "op": "MSTORE", + "gas": 410726, + "gasCost": 12, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": {} + }, + { + "pc": 5, + "op": "PUSH1", + "gas": 410714, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 7, + "op": "CALLDATASIZE", + "gas": 410711, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 8, + "op": "LT", + "gas": 410709, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 9, + "op": "PUSH2", + "gas": 410706, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 12, + "op": "JUMPI", + "gas": 410703, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c7" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 13, + "op": "PUSH1", + "gas": 410693, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 15, + "op": "CALLDATALOAD", + "gas": 410690, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 16, + "op": "PUSH1", + "gas": 410687, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000007500000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 18, + "op": "SHR", + "gas": 410684, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000007500000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 19, + "op": "DUP1", + "gas": 410681, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 20, + "op": "PUSH4", + "gas": 410678, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 25, + "op": "GT", + "gas": 410675, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000044f541ae" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 26, + "op": "PUSH2", + "gas": 410672, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 29, + "op": "JUMPI", + "gas": 410669, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000007f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 127, + "op": "JUMPDEST", + "gas": 410659, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 128, + "op": "DUP1", + "gas": 410658, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 129, + "op": "PUSH1", + "gas": 410655, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 131, + "op": "GT", + "gas": 410652, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000d7" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 132, + "op": "PUSH2", + "gas": 410649, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 135, + "op": "JUMPI", + "gas": 410646, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000aa" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 170, + "op": "JUMPDEST", + "gas": 410636, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 171, + "op": "DUP1", + "gas": 410635, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 172, + "op": "PUSH1", + "gas": 410632, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 174, + "op": "EQ", + "gas": 410629, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075", + "000000000000000000000000000000000000000000000000000000000000002c" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 175, + "op": "PUSH2", + "gas": 410626, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 178, + "op": "JUMPI", + "gas": 410623, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000d3" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 179, + "op": "DUP1", + "gas": 410613, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 180, + "op": "PUSH1", + "gas": 410610, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 182, + "op": "EQ", + "gas": 410607, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 183, + "op": "PUSH2", + "gas": 410604, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 186, + "op": "JUMPI", + "gas": 410601, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000f5" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 245, + "op": "JUMPDEST", + "gas": 410591, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 246, + "op": "CALLVALUE", + "gas": 410590, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 247, + "op": "DUP1", + "gas": 410588, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 248, + "op": "ISZERO", + "gas": 410585, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 249, + "op": "PUSH2", + "gas": 410582, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 252, + "op": "JUMPI", + "gas": 410579, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000101" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 257, + "op": "JUMPDEST", + "gas": 410569, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 258, + "op": "POP", + "gas": 410568, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 259, + "op": "PUSH2", + "gas": 410566, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 262, + "op": "PUSH2", + "gas": 410563, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 265, + "op": "CALLDATASIZE", + "gas": 410560, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 266, + "op": "PUSH1", + "gas": 410558, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 268, + "op": "PUSH2", + "gas": 410555, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 271, + "op": "JUMP", + "gas": 410552, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000eed" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3821, + "op": "JUMPDEST", + "gas": 410544, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3822, + "op": "PUSH1", + "gas": 410543, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3824, + "op": "DUP1", + "gas": 410540, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3825, + "op": "PUSH1", + "gas": 410537, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3827, + "op": "DUP1", + "gas": 410534, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3828, + "op": "PUSH1", + "gas": 410531, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3830, + "op": "DUP1", + "gas": 410528, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3831, + "op": "PUSH1", + "gas": 410525, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3833, + "op": "DUP8", + "gas": 410522, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3834, + "op": "DUP10", + "gas": 410519, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3835, + "op": "SUB", + "gas": 410516, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3836, + "op": "SLT", + "gas": 410513, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000003a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3837, + "op": "ISZERO", + "gas": 410510, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3838, + "op": "PUSH2", + "gas": 410507, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3841, + "op": "JUMPI", + "gas": 410504, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000f05" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3845, + "op": "JUMPDEST", + "gas": 410494, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3846, + "op": "PUSH2", + "gas": 410493, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3849, + "op": "DUP9", + "gas": 410490, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3850, + "op": "DUP9", + "gas": 410487, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3851, + "op": "PUSH2", + "gas": 410484, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3854, + "op": "JUMP", + "gas": 410481, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000c85" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3205, + "op": "JUMPDEST", + "gas": 410473, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3206, + "op": "DUP1", + "gas": 410472, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3207, + "op": "CALLDATALOAD", + "gas": 410469, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3208, + "op": "PUSH1", + "gas": 410466, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3210, + "op": "DUP2", + "gas": 410463, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000ff" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3211, + "op": "AND", + "gas": 410460, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000ff", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3212, + "op": "DUP2", + "gas": 410457, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3213, + "op": "EQ", + "gas": 410454, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3214, + "op": "PUSH2", + "gas": 410451, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3217, + "op": "JUMPI", + "gas": 410448, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000009b2" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2482, + "op": "JUMPDEST", + "gas": 410438, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2483, + "op": "SWAP3", + "gas": 410437, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2484, + "op": "SWAP2", + "gas": 410434, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000f0f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2485, + "op": "POP", + "gas": 410431, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2486, + "op": "POP", + "gas": 410429, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000f0f", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2487, + "op": "JUMP", + "gas": 410427, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000f0f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3855, + "op": "JUMPDEST", + "gas": 410419, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3856, + "op": "SWAP6", + "gas": 410418, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3857, + "op": "POP", + "gas": 410415, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3858, + "op": "PUSH1", + "gas": 410413, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3860, + "op": "DUP8", + "gas": 410410, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3861, + "op": "ADD", + "gas": 410407, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3862, + "op": "CALLDATALOAD", + "gas": 410404, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3863, + "op": "PUSH2", + "gas": 410401, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3866, + "op": "DUP2", + "gas": 410398, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3867, + "op": "PUSH2", + "gas": 410395, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3870, + "op": "JUMP", + "gas": 410392, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000fbf" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4031, + "op": "JUMPDEST", + "gas": 410384, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4032, + "op": "PUSH20", + "gas": 410383, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4053, + "op": "DUP2", + "gas": 410380, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4054, + "op": "AND", + "gas": 410377, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4055, + "op": "DUP2", + "gas": 410374, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4056, + "op": "EQ", + "gas": 410371, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4057, + "op": "PUSH2", + "gas": 410368, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 4060, + "op": "JUMPI", + "gas": 410365, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000ace" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2766, + "op": "JUMPDEST", + "gas": 410355, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2767, + "op": "POP", + "gas": 410354, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 2768, + "op": "JUMP", + "gas": 410352, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000f1f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3871, + "op": "JUMPDEST", + "gas": 410344, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3872, + "op": "SWAP5", + "gas": 410343, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3873, + "op": "POP", + "gas": 410340, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3874, + "op": "PUSH1", + "gas": 410338, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3876, + "op": "DUP8", + "gas": 410335, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3877, + "op": "ADD", + "gas": 410332, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3878, + "op": "CALLDATALOAD", + "gas": 410329, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000044" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3879, + "op": "SWAP4", + "gas": 410326, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3880, + "op": "POP", + "gas": 410323, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3881, + "op": "PUSH1", + "gas": 410321, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3883, + "op": "DUP8", + "gas": 410318, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000060" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3884, + "op": "ADD", + "gas": 410315, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3885, + "op": "CALLDATALOAD", + "gas": 410312, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000064" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3886, + "op": "SWAP3", + "gas": 410309, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3887, + "op": "POP", + "gas": 410306, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3888, + "op": "PUSH1", + "gas": 410304, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3890, + "op": "DUP8", + "gas": 410301, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3891, + "op": "ADD", + "gas": 410298, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3892, + "op": "CALLDATALOAD", + "gas": 410295, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000084" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3893, + "op": "PUSH8", + "gas": 410292, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3902, + "op": "DUP2", + "gas": 410289, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "000000000000000000000000000000000000000000000000ffffffffffffffff" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3903, + "op": "GT", + "gas": 410286, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "000000000000000000000000000000000000000000000000ffffffffffffffff", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3904, + "op": "ISZERO", + "gas": 410283, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3905, + "op": "PUSH2", + "gas": 410280, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3908, + "op": "JUMPI", + "gas": 410277, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000f48" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3912, + "op": "JUMPDEST", + "gas": 410267, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3913, + "op": "PUSH2", + "gas": 410266, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3916, + "op": "DUP10", + "gas": 410263, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3917, + "op": "DUP3", + "gas": 410260, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3918, + "op": "DUP11", + "gas": 410257, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3919, + "op": "ADD", + "gas": 410254, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3920, + "op": "PUSH2", + "gas": 410251, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3923, + "op": "JUMP", + "gas": 410248, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000c45" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3141, + "op": "JUMPDEST", + "gas": 410240, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3142, + "op": "PUSH1", + "gas": 410239, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3144, + "op": "DUP1", + "gas": 410236, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3145, + "op": "DUP4", + "gas": 410233, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3146, + "op": "PUSH1", + "gas": 410230, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3148, + "op": "DUP5", + "gas": 410227, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003a4", + "000000000000000000000000000000000000000000000000000000000000001f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3149, + "op": "ADD", + "gas": 410224, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003a4", + "000000000000000000000000000000000000000000000000000000000000001f", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3150, + "op": "SLT", + "gas": 410221, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000c3" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3151, + "op": "PUSH2", + "gas": 410218, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3154, + "op": "JUMPI", + "gas": 410215, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000c56" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3158, + "op": "JUMPDEST", + "gas": 410205, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3159, + "op": "POP", + "gas": 410204, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3160, + "op": "DUP2", + "gas": 410202, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3161, + "op": "CALLDATALOAD", + "gas": 410199, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3162, + "op": "PUSH8", + "gas": 410196, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3171, + "op": "DUP2", + "gas": 410193, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "000000000000000000000000000000000000000000000000ffffffffffffffff" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3172, + "op": "GT", + "gas": 410190, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "000000000000000000000000000000000000000000000000ffffffffffffffff", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3173, + "op": "ISZERO", + "gas": 410187, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3174, + "op": "PUSH2", + "gas": 410184, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3177, + "op": "JUMPI", + "gas": 410181, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000c6d" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3181, + "op": "JUMPDEST", + "gas": 410171, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3182, + "op": "PUSH1", + "gas": 410170, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3184, + "op": "DUP4", + "gas": 410167, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3185, + "op": "ADD", + "gas": 410164, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3186, + "op": "SWAP2", + "gas": 410161, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3187, + "op": "POP", + "gas": 410158, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3188, + "op": "DUP4", + "gas": 410156, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3189, + "op": "PUSH1", + "gas": 410153, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3191, + "op": "DUP3", + "gas": 410150, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3192, + "op": "DUP6", + "gas": 410147, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3193, + "op": "ADD", + "gas": 410144, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3194, + "op": "ADD", + "gas": 410141, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000368" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3195, + "op": "GT", + "gas": 410138, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000388" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3196, + "op": "ISZERO", + "gas": 410135, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3197, + "op": "PUSH2", + "gas": 410132, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3200, + "op": "JUMPI", + "gas": 410129, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000c3e" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3134, + "op": "JUMPDEST", + "gas": 410119, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3135, + "op": "SWAP3", + "gas": 410118, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000003a4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3136, + "op": "POP", + "gas": 410115, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3137, + "op": "SWAP3", + "gas": 410113, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3138, + "op": "SWAP1", + "gas": 410110, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000d9f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3139, + "op": "POP", + "gas": 410107, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000d9f", + "00000000000000000000000000000000000000000000000000000000000000a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3140, + "op": "JUMP", + "gas": 410105, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000d9f" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3487, + "op": "JUMPDEST", + "gas": 410097, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3488, + "op": "SWAP8", + "gas": 410096, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3489, + "op": "SWAP11", + "gas": 410093, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3490, + "op": "SWAP7", + "gas": 410090, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000110" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3491, + "op": "SWAP10", + "gas": 410087, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000003a4", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3492, + "op": "POP", + "gas": 410084, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000003a4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3493, + "op": "SWAP5", + "gas": 410082, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000000000000000000c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3494, + "op": "SWAP8", + "gas": 410079, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "0000000000000000000000000000000000000000000000000000000000000004", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3495, + "op": "POP", + "gas": 410076, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3496, + "op": "SWAP3", + "gas": 410074, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3497, + "op": "SWAP6", + "gas": 410071, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3498, + "op": "SWAP4", + "gas": 410068, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3499, + "op": "SWAP5", + "gas": 410065, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000110", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3500, + "op": "SWAP3", + "gas": 410062, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000110" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3501, + "op": "POP", + "gas": 410059, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3502, + "op": "POP", + "gas": 410057, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3503, + "op": "POP", + "gas": 410055, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 3504, + "op": "JUMP", + "gas": 410053, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000110" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 272, + "op": "JUMPDEST", + "gas": 410045, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 273, + "op": "PUSH2", + "gas": 410044, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 276, + "op": "JUMP", + "gas": 410041, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000301" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 769, + "op": "JUMPDEST", + "gas": 410033, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 770, + "op": "CALLER", + "gas": 410032, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 771, + "op": "PUSH1", + "gas": 410030, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 773, + "op": "SWAP1", + "gas": 410027, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 774, + "op": "DUP2", + "gas": 410024, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 775, + "op": "MSTORE", + "gas": 410021, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 776, + "op": "PUSH1", + "gas": 410018, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 778, + "op": "PUSH1", + "gas": 410015, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 780, + "op": "MSTORE", + "gas": 410012, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 781, + "op": "PUSH1", + "gas": 410009, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 783, + "op": "SWAP1", + "gas": 410006, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 784, + "op": "SHA3", + "gas": 410003, + "gasCost": 42, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 785, + "op": "SLOAD", + "gas": 409961, + "gasCost": 800, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "e9aa3362e80077d4621a0bff76fcb780a24af5780c4fe4325784108d311c437e" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 786, + "op": "PUSH1", + "gas": 409161, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 788, + "op": "AND", + "gas": 409158, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000ff" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 789, + "op": "PUSH2", + "gas": 409155, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 792, + "op": "JUMPI", + "gas": 409152, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000031d" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 797, + "op": "JUMPDEST", + "gas": 409142, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 798, + "op": "DUP4", + "gas": 409141, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 799, + "op": "DUP6", + "gas": 409138, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 800, + "op": "PUSH20", + "gas": 409135, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 821, + "op": "AND", + "gas": 409132, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 822, + "op": "BALANCE", + "gas": 409129, + "gasCost": 700, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 823, + "op": "EQ", + "gas": 408429, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "00000000000000000000000000000000000000000000000087af04e132718c08" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 824, + "op": "ISZERO", + "gas": 408426, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 825, + "op": "PUSH2", + "gas": 408423, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 828, + "op": "JUMPI", + "gas": 408420, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000341" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 833, + "op": "JUMPDEST", + "gas": 408410, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 834, + "op": "PUSH1", + "gas": 408409, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 836, + "op": "DUP4", + "gas": 408406, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 837, + "op": "DUP2", + "gas": 408403, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 838, + "op": "MSTORE", + "gas": 408400, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000009073c8c1fee3dd73fb10c0b4241ce8b708a7c432", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 839, + "op": "PUSH1", + "gas": 408397, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 841, + "op": "DUP2", + "gas": 408394, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 842, + "op": "SWAP1", + "gas": 408391, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 843, + "op": "MSTORE", + "gas": 408388, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 844, + "op": "PUSH1", + "gas": 408385, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 846, + "op": "SWAP1", + "gas": 408382, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 847, + "op": "SHA3", + "gas": 408379, + "gasCost": 42, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 848, + "op": "SLOAD", + "gas": 408337, + "gasCost": 800, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "76b35ea2d6f8880562a4e7e8893ecaa75ab4dc70e56b5bee9dbc2bffff029cf4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 849, + "op": "PUSH1", + "gas": 407537, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 851, + "op": "AND", + "gas": 407534, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000ff" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 852, + "op": "ISZERO", + "gas": 407531, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 853, + "op": "PUSH2", + "gas": 407528, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 856, + "op": "JUMPI", + "gas": 407525, + "gasCost": 10, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000035d" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 857, + "op": "PUSH2", + "gas": 407515, + "gasCost": 3, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 860, + "op": "JUMP", + "gas": 407512, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4", + "0000000000000000000000000000000000000000000000000000000000000411" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1041, + "op": "JUMPDEST", + "gas": 407504, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1042, + "op": "POP", + "gas": 407503, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000002c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1043, + "op": "POP", + "gas": 407501, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "00000000000000000000000000000000000000000000000000000000000000c4" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1044, + "op": "POP", + "gas": 407499, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408", + "0000000000000000000000000000000000000000000000000005ab3eeacf3439" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1045, + "op": "POP", + "gas": 407497, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6", + "00000000000000000000000000000000000000000000000087b5809dd6b1b408" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1046, + "op": "POP", + "gas": 407495, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000003d715939a6f90497175e4b6b31eee68f313237d6" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1047, + "op": "POP", + "gas": 407493, + "gasCost": 2, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 1048, + "op": "JUMP", + "gas": 407491, + "gasCost": 8, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075", + "00000000000000000000000000000000000000000000000000000000000000f3" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 243, + "op": "JUMPDEST", + "gas": 407483, + "gasCost": 1, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + }, + { + "pc": 244, + "op": "STOP", + "gas": 407482, + "gasCost": 0, + "depth": 1, + "error": null, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000075" + ], + "memory": [ + "0000000000000000000000000000000000000000000000000005ab3eeacf3439", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": {} + } + ] + }, + "id": 1 +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/tx-0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa.json b/testing/simple-upstream/src/main/resources/tx-0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa.json new file mode 100644 index 00000000..02cae64c --- /dev/null +++ b/testing/simple-upstream/src/main/resources/tx-0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa.json @@ -0,0 +1,16 @@ +{ + "blockHash": "0x9a834c53bbee9c2665a5a84789a1d1ad73750b2d77b50de44f457f411d02e52e", + "blockNumber": "0x100000", + "from": "0x68795c4aa09d6f4ed3e5deddf8c2ad3049a601da", + "gas": "0x15f90", + "gasPrice": "0xba43b7400", + "hash": "0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa", + "input": "0x", + "nonce": "0x2f31", + "r": "0x1d263f32de00456cbc3e4099c623a6ca48e3188f01dd16461687512f8c3bb7d6", + "s": "0x62629f42a98f7c5fa60f8c3630cf67b5eb4772e0ff65a458d2116c15e22d6451", + "to": "0xdae787ec66e65c60ad35203800b97b45fcb0f909", + "transactionIndex": "0x0", + "v": "0x1b", + "value": "0x2b81097c919a9e000" +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/tx-0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77.json b/testing/simple-upstream/src/main/resources/tx-0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77.json new file mode 100644 index 00000000..c659e4d4 --- /dev/null +++ b/testing/simple-upstream/src/main/resources/tx-0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77.json @@ -0,0 +1,16 @@ +{ + "blockHash": "0x18c68d9ba58772a4409d65d61891b25db03a105a7769ae08ef2cff697921b446", + "blockNumber": "0x100001", + "from": "0x2a65aca4d5fc5b5c859090a6c34d164135398226", + "gas": "0x15f90", + "gasPrice": "0xba43b7400", + "hash": "0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77", + "input": "0x", + "nonce": "0x32c13", + "r": "0xe6ca408c2e91163b46c6bb66054a000a25b6c1d8024460499a185ab2e4bb41a0", + "s": "0x53bc43662fda46c2e7051fa704b75ec815e9102cca5400817011ffd99e77139d", + "to": "0x7388ae5bc873163025fffe5956322f734f9b570d", + "transactionIndex": "0x0", + "v": "0x1b", + "value": "0xe660f79cf5e4800" +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/tx-0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0.json b/testing/simple-upstream/src/main/resources/tx-0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0.json new file mode 100644 index 00000000..7e1141f6 --- /dev/null +++ b/testing/simple-upstream/src/main/resources/tx-0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0.json @@ -0,0 +1,16 @@ +{ + "blockHash": "0x9a834c53bbee9c2665a5a84789a1d1ad73750b2d77b50de44f457f411d02e52e", + "blockNumber": "0x100000", + "from": "0x68795c4aa09d6f4ed3e5deddf8c2ad3049a601da", + "gas": "0x15f90", + "gasPrice": "0xba43b7400", + "hash": "0xb4216e88df6ebfe666bbe43370d1ddfe8d9c1975d2b8375a522700f7f59c3ed0", + "input": "0x", + "nonce": "0x2f32", + "r": "0xc25ceef654cd3bd734201fc08589970e0663431121bc47cc4a70335e072b09c0", + "s": "0x1c67b037a59a8f5badde3a7eb586d7888dcf6dad64aabb080c4c0db593a91254", + "to": "0x04a2a3ee9c9ea82e1f918ece209f8a7e6d7521e7", + "transactionIndex": "0x1", + "v": "0x1c", + "value": "0x377fb2f2cbd73c00" +} \ No newline at end of file diff --git a/testing/simple-upstream/src/main/resources/tx-0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e.json b/testing/simple-upstream/src/main/resources/tx-0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e.json new file mode 100644 index 00000000..a068d29a --- /dev/null +++ b/testing/simple-upstream/src/main/resources/tx-0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e.json @@ -0,0 +1,16 @@ +{ + "blockHash": "0x18c68d9ba58772a4409d65d61891b25db03a105a7769ae08ef2cff697921b446", + "blockNumber": "0x100001", + "from": "0x2a65aca4d5fc5b5c859090a6c34d164135398226", + "gas": "0x15f90", + "gasPrice": "0xba43b7400", + "hash": "0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e", + "input": "0x", + "nonce": "0x32c14", + "r": "0x77fe7cfb03258f2eed8ffbbdc19f73f4a6095a55a7e06f81ade02f3435f7e249", + "s": "0x821ad733ceecfa7567e9c8ffb66e3f8bbc3b2b7b21bacadb2a065e57b2a6992", + "to": "0x1c774e876a46f51e305add171ba3bb4589408273", + "transactionIndex": "0x1", + "v": "0x1b", + "value": "0xe5ef66c73b5fc00" +} \ No newline at end of file diff --git a/testing/trial/README.adoc b/testing/trial/README.adoc new file mode 100644 index 00000000..80d35c4b --- /dev/null +++ b/testing/trial/README.adoc @@ -0,0 +1,8 @@ += Actual Tests + +Expects running _Simple Upstream_ and _Testing Dshackle_. + +.Run from current directory +---- +./gradlew check +---- \ No newline at end of file diff --git a/testing/trial/build.gradle b/testing/trial/build.gradle new file mode 100644 index 00000000..2b880154 --- /dev/null +++ b/testing/trial/build.gradle @@ -0,0 +1,35 @@ +plugins { + id 'java' + id 'groovy' + id 'idea' +} + +repositories { + mavenLocal() + mavenCentral() + maven { url "https://maven.emrld.io" } +} + +dependencies { + implementation "org.apache.httpcomponents:httpclient:4.5.12" + implementation "org.codehaus.groovy:groovy:3.0.4" + implementation "com.fasterxml.jackson.core:jackson-core:2.9.8" + implementation "com.fasterxml.jackson.core:jackson-databind:2.9.8" + implementation "io.grpc:grpc-netty:1.46.0" + implementation "org.bouncycastle:bcprov-jdk15on:1.61" + implementation("io.emeraldpay:emerald-api:0.12-alpha.1") { + exclude group: 'com.salesforce.servicelibs', module: 'reactor-grpc' + } + + testImplementation "org.spockframework:spock-core:2.0-M3-groovy-3.0" +} + + +test { + systemProperty "trialMode", project.getProperty("dshackleTrialMode") + systemProperty "signatureKey", project.getProperty("signatureKey") + useJUnitPlatform() + testLogging { + events "PASSED", "FAILED" + } +} \ No newline at end of file diff --git a/testing/trial/settings.gradle b/testing/trial/settings.gradle new file mode 100644 index 00000000..e27e091c --- /dev/null +++ b/testing/trial/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'dshackle-testing-trial' \ No newline at end of file diff --git a/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Client.groovy b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Client.groovy new file mode 100644 index 00000000..9feac2ca --- /dev/null +++ b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Client.groovy @@ -0,0 +1,6 @@ +package io.emeraldpay.dshackle.testing.trial + +interface Client { + Map execute(String method, List params) + Map execute(Object id, String method, List params) +} \ No newline at end of file diff --git a/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Debugger.groovy b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Debugger.groovy new file mode 100644 index 00000000..fe8dc620 --- /dev/null +++ b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/Debugger.groovy @@ -0,0 +1,20 @@ +package io.emeraldpay.dshackle.testing.trial + +class Debugger { + + public static enabled = true + + static void showOut(String json) { + if (!enabled) { + return + } + println(">> $json") + } + + static void showIn(String json) { + if (!enabled) { + return + } + println("<< $json") + } +} diff --git a/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProtoClient.groovy b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProtoClient.groovy new file mode 100644 index 00000000..e7b2b292 --- /dev/null +++ b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProtoClient.groovy @@ -0,0 +1,64 @@ +package io.emeraldpay.dshackle.testing.trial + +import com.fasterxml.jackson.databind.ObjectMapper +import com.google.common.primitives.Bytes +import com.google.protobuf.ByteString +import io.emeraldpay.api.proto.BlockchainOuterClass +import io.emeraldpay.api.proto.Common +import io.emeraldpay.api.proto.ReactorBlockchainGrpc +import io.emeraldpay.grpc.Chain +import io.grpc.ManagedChannel +import io.grpc.netty.NettyChannelBuilder + +class ProtoClient implements Client { + private int sequence = 0; + private ObjectMapper objectMapper; + private ReactorBlockchainGrpc.ReactorBlockchainStub stub + private Chain chain + + ProtoClient(ManagedChannel channel, Chain chain) { + this.stub = ReactorBlockchainGrpc.newReactorStub(channel) + this.objectMapper = new ObjectMapper() + this.chain= chain + } + + static ProtoClient create(String host, int port, Chain chain) { + def channel = NettyChannelBuilder.forAddress(host, port) + .maxInboundMessageSize(Integer.MAX_VALUE) + .usePlaintext() + new ProtoClient(channel.build(), chain) + } + + static ProtoClient basic() { + create("localhost", 12448, Chain.ETHEREUM) + } + + BlockchainOuterClass.NativeCallReplyItem executeNative(String method, List params, Long nonce) { + def req = BlockchainOuterClass.NativeCallRequest + .newBuilder() + .setChain(Common.ChainRef.CHAIN_ETHEREUM) + .addItems(BlockchainOuterClass.NativeCallItem + .newBuilder() + .setId(0) + .setNonce(nonce) + .setMethod(method) + .setPayload(ByteString.copyFrom(objectMapper.writeValueAsBytes(params))) + .build() + ).build() + stub.nativeCall(req) + .single() + .block() + } + + Map execute(String method, List params) { + return execute(sequence++, method, params) + } + Map execute(Object id, String method, List params) { + def result = executeNative(method, params, 0L) + if (result.errorMessage != "") { + return [error: result.errorMessage] + } else { + return objectMapper.readerFor(Map).readValue(Bytes.concat("{\"result\": ".bytes, result.payload.toByteArray(), "}".bytes)) + } + } +} \ No newline at end of file diff --git a/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProxyClient.groovy b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProxyClient.groovy new file mode 100644 index 00000000..98d3e94f --- /dev/null +++ b/testing/trial/src/main/groovy/io/emeraldpay/dshackle/testing/trial/ProxyClient.groovy @@ -0,0 +1,83 @@ +package io.emeraldpay.dshackle.testing.trial + +import com.fasterxml.jackson.databind.ObjectMapper +import org.apache.commons.codec.binary.Hex +import org.apache.http.HttpHeaders +import org.apache.http.client.HttpClient +import org.apache.http.client.methods.CloseableHttpResponse +import org.apache.http.client.methods.HttpPost +import org.apache.http.entity.ContentType +import org.apache.http.entity.StringEntity +import org.apache.http.impl.client.CloseableHttpClient +import org.apache.http.impl.client.HttpClientBuilder +import org.apache.http.impl.client.HttpClients + +class ProxyClient implements Client { + + private int sequence = 0; + + private String url + private ObjectMapper objectMapper + + ProxyClient(String url) { + this.url = url + this.objectMapper = new ObjectMapper() + } + + static ProxyClient ethereumMock() { + return forPrefix(18080, "eth") + } + + static ProxyClient ethereumReal() { + return forPrefix(18081, "eth") + } + + static ProxyClient ethereumRinkeby() { + return forPrefix(18081, "rinkeby") + } + + static ProxyClient forPrefix(String prefix) { + return forPrefix(18080, prefix) + } + + static ProxyClient forPrefix(int port, String prefix) { + return new ProxyClient("http://127.0.0.1:$port/$prefix") + } + + static ProxyClient forOriginal(int port) { + return new ProxyClient("http://127.0.0.1:$port") + } + + Map execute(String method, List params) { + return execute(sequence++, method, params) + } + + Map execute(Object id, String method, List params) { + Map jsonData = [ + id : id, + jsonrpc: "2.0", + method : method, + params : params + ] + String reqJson = objectMapper.writeValueAsString(jsonData) + Debugger.showOut(reqJson) + CloseableHttpClient httpClient = null + try { + httpClient = HttpClients.createDefault() + def request = new HttpPost(url) + request.setEntity(new StringEntity(reqJson, ContentType.APPLICATION_JSON)) + CloseableHttpResponse response = httpClient.execute(request) + if (response.getStatusLine().statusCode != 200) { + throw new IllegalStateException("Non-ok status: " + response.getStatusLine().statusCode) + } + String respJson = response.entity.content.text + Debugger.showIn(respJson) + return objectMapper.readerFor(Map).readValue(respJson) + } finally { + httpClient?.close() + } + + return [error: "NOT EXECUTED"] + } + +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/DispatchSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/DispatchSpec.groovy new file mode 100644 index 00000000..a7a30856 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/DispatchSpec.groovy @@ -0,0 +1,63 @@ +package io.emeraldpay.dshackle.testing.trial.basicproxy + +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification + +@IgnoreIf({ System.getProperty('trialMode') != 'basic' }) +class DispatchSpec extends Specification { + + def client = ProxyClient.forPrefix("eth") + + def "multiple calls routed roughly equal to upstreams"() { + when: + def calls1before = ProxyClient.forOriginal(18545).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + def calls2before = ProxyClient.forOriginal(18546).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + + 100.times { + client.execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000001", data: "0x00000000" + Integer.toString(it, 16)]]) + } + + def calls1after = ProxyClient.forOriginal(18545).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + def calls2after = ProxyClient.forOriginal(18546).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + + def calls1 = onlyNew(calls1before, calls1after) + def calls2 = onlyNew(calls2before, calls2after) + + then: + calls1.size() >= 48 + calls2.size() >= 48 + calls1.size() + calls2.size() == 100 + } + + def "multiple calls routed roughly equal to upstreams - for latest block"() { + when: + def calls1before = ProxyClient.forOriginal(18545).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + def calls2before = ProxyClient.forOriginal(18546).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + + 100.times { + client.execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000001", data: "0x00000000" + Integer.toString(it, 16)], "0x100001"]) + } + + def calls1after = ProxyClient.forOriginal(18545).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + def calls2after = ProxyClient.forOriginal(18546).execute("eth_call", [[to: "0x0123456789abcdef0123456789abcdef00000002"]]).result as List + + def calls1 = onlyNew(calls1before, calls1after) + def calls2 = onlyNew(calls2before, calls2after) + + then: + calls1.size() >= 48 + calls2.size() >= 48 + calls1.size() + calls2.size() == 100 + } + + private List onlyNew(List before, List after) { + return after.findAll { a -> + !before.any { b -> + b.id == a.id + } + }.findAll { + (it.json as String).contains("0x0123456789abcdef0123456789abcdef00000001") + } + } +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/GivesErrorSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/GivesErrorSpec.groovy new file mode 100644 index 00000000..4043b229 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/GivesErrorSpec.groovy @@ -0,0 +1,74 @@ +package io.emeraldpay.dshackle.testing.trial.basicproxy + +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification + +@IgnoreIf({ System.getProperty('trialMode') != 'basic' }) +class GivesErrorSpec extends Specification { + + def client = ProxyClient.forPrefix("eth") + + def "Gives error message"() { + // issue #42 + when: + def act = client.execute("eth_call", [[to: "0x542156d51D10Db5acCB99f9Db7e7C91B74E80a2c"]]) + then: + act.result == null + act.error != null + with(act.error) { + code == -32015 + message == "VM execution error." + } + } + + def "Gives error data"() { + // issue #42 + when: + def act = client.execute("eth_call", [[to: "0x8ee2a5aca4f88cb8c757b8593d0734855dcc0eba"]]) + then: + act.result == null + act.error != null + with(act.error) { + code == -32015 + message == "VM execution error." + data == "revert: SafeMath: division by zero" + } + } + + def "Dispatch error from upstream when block is specified"() { + // issue #67 + when: + def call = [ + to : "0xdAC17F958D2ee523a2206206994597C13D831ec7", + from: "0xEF65ffB384c99a00403EAa22115323a555700D79", + data: "0xa9059cbb0000000000000000000000003f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be000000000000000000000000000000000000000000000000000000004856fb60" + ] + def act = client.execute("eth_call", [call, "0x100000"]) + then: + act.result == null + act.error != null + with(act.error) { + code == -32000 + message == "invalid opcode: opcode 0xfe not defined" + } + } + + def "Dispatch error from upstream when custome method is used"() { + // issue #67 + when: + def call = [ + to : "0xdAC17F958D2ee523a2206206994597C13D831ec7", + from: "0xEF65ffB384c99a00403EAa22115323a555700D79", + data: "0xa9059cbb0000000000000000000000003f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be000000000000000000000000000000000000000000000000000000004856fb60" + ] + def act = client.execute("test_foo", [call, "0x100000"]) + then: + act.result == null + act.error != null + with(act.error) { + code == -32000 + message == "invalid opcode: opcode 0xfe not defined" + } + } +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/HardcodedCallsSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/HardcodedCallsSpec.groovy new file mode 100644 index 00000000..96c99be6 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/HardcodedCallsSpec.groovy @@ -0,0 +1,36 @@ +package io.emeraldpay.dshackle.testing.trial.basicproxy + +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification + +@IgnoreIf({ System.getProperty('trialMode') != 'basic' }) +class HardcodedCallsSpec extends Specification { + + def client = ProxyClient.forPrefix("eth") + + def "get syncing"() { + when: + def act = client.execute("eth_syncing", []) + then: + act.result == false + act.error == null + } + + def "get network version"() { + when: + def act = client.execute("net_version", []) + then: + act.result == "1" + act.error == null + } + + def "get peer count"() { + when: + def act = client.execute("net_peerCount", []) + then: + act.result == "0x2a" + act.error == null + } + +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/MetamaskCallSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/MetamaskCallSpec.groovy new file mode 100644 index 00000000..4588945f --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/MetamaskCallSpec.groovy @@ -0,0 +1,20 @@ +package io.emeraldpay.dshackle.testing.trial.basicproxy + +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification + +@IgnoreIf({ System.getProperty('trialMode') != 'basic' }) +class MetamaskCallSpec extends Specification { + + def client = ProxyClient.forPrefix("eth") + + def "use long id"() { + when: + def act = client.execute(1057264140543346, "net_version", []) + then: + act.id == 1057264140543346 + act.result != null + act.error == null + } +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/StandardCallsSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/StandardCallsSpec.groovy new file mode 100644 index 00000000..bf11f266 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/basicproxy/StandardCallsSpec.groovy @@ -0,0 +1,166 @@ +package io.emeraldpay.dshackle.testing.trial.basicproxy + +import com.google.common.primitives.Bytes +import com.google.common.primitives.Longs +import io.emeraldpay.dshackle.testing.trial.ProtoClient +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import org.apache.commons.codec.binary.Hex +import spock.lang.IgnoreIf +import spock.lang.Shared +import spock.lang.Specification +import java.security.KeyFactory +import org.bouncycastle.util.io.pem.PemReader + +import java.security.MessageDigest +import java.security.Signature +import java.security.spec.PKCS8EncodedKeySpec +import java.security.spec.X509EncodedKeySpec + +@IgnoreIf({ System.getProperty('trialMode') != 'basic' }) +class StandardCallsSpec extends Specification { + + @Shared client_proto = ProtoClient.basic() + @Shared client_proxy = ProxyClient.forPrefix("eth") + + @Shared clients = [client_proto, client_proxy] + + def "get height"() { + when: + def act = client.execute("eth_blockNumber", []) + then: + act.result == "0x100001" + act.error == null + where: + client << clients + } + + def "get block"() { + when: + def act = client.execute("eth_getBlockByNumber", ["0x100001", false]) + then: + act.result != null + with(act.result) { + number == "0x100001" + hash == "0x18c68d9ba58772a4409d65d61891b25db03a105a7769ae08ef2cff697921b446" + transactions == [ + "0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77", + "0xe589a39acea3091b584b650158d08b159aa07e97b8e8cddb8f81cb606e13382e" + ] + } + act.error == null + where: + client << clients + } + + def "get non-existing block"() { + when: + def act = client.execute("eth_getBlockByNumber", ["0x200001", false]) + then: + act.result == null + act.error == null + where: + client << clients + } + + def "get tx"() { + when: + def act = client.execute("eth_getTransactionByHash", ["0x01c5a8461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa"]) + then: + act.result != null + with(act.result) { + blockHash == "0x9a834c53bbee9c2665a5a84789a1d1ad73750b2d77b50de44f457f411d02e52e" + } + act.error == null + where: + client << clients + } + + def "get non-existing tx"() { + when: + def act = client.execute("eth_getTransactionByHash", ["0x000000461d06c2c195035c148af0f871c7679841d86ae5bb98676bb2d8e68dfa"]) + then: + act.result == null + act.error == null + where: + client << clients + } + + def "get block with txes"() { + when: + def act = client.execute("eth_getBlockByNumber", ["0x100001", true]) + then: + act.result != null + with(act.result) { + number == "0x100001" + hash == "0x18c68d9ba58772a4409d65d61891b25db03a105a7769ae08ef2cff697921b446" + transactions.size() == 2 + transactions[0] instanceof Map + transactions[1] instanceof Map + with(transactions.find { it.hash == "0x146b8f4b6300c73bb7476359b9f1c5ee3f686a86b2aa673552cf0f9de9a42e77" }) { + from == "0x2a65aca4d5fc5b5c859090a6c34d164135398226" + } + } + act.error == null + where: + client << clients + } + + def "returns original block json"() { + when: + def act = client.execute("eth_getBlockByNumber", ["0x100001", false]) + then: + act.result != null + with(act.result) { + testFoo == "bar" + } + act.error == null + where: + client << clients + } + + def "returns original block json with tx"() { + when: + def act = client.execute("eth_getBlockByNumber", ["0x100001", true]) + then: + act.result != null + with(act.result) { + testFoo == "bar" + } + act.error == null + where: + client << clients + } + + def "check response signature with nonce"() { + when: + def act = client_proto.executeNative("eth_blockNumber", [], 10) + def keyFactory = KeyFactory.getInstance("EC") + def key = new File(System.getProperty('signatureKey')) + def reader = new PemReader(key.newReader()) + def keySpec = new X509EncodedKeySpec(reader.readPemObject().getContent()) + def pubKey = keyFactory.generatePublic(keySpec) + def sig = Signature.getInstance("SHA256withECDSA") + sig.initVerify(pubKey) + def sep = "/".bytes + def digest = MessageDigest.getInstance("SHA-256") + def messageHash = digest.digest(act.payload.toByteArray()) + def sigmessage = Bytes.concat("DSHACKLESIG".bytes, + sep, + 10L.toString().bytes, + sep, + act.signature.upstreamId.bytes, + sep, + Hex.encodeHexString(messageHash).bytes) + sig.update(sigmessage) + then: + (new String(act.payload.toByteArray())) == "\"0x100001\"" + sig.verify(act.signature.signature.toByteArray()) + } + + def "check response signature without nonce"() { + when: + def act = client_proto.executeNative("eth_blockNumber", [], 0L) + then: + act.signature.signature.isEmpty() + } +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/mainnet/GetBlockSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/mainnet/GetBlockSpec.groovy new file mode 100644 index 00000000..1c7c9108 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/mainnet/GetBlockSpec.groovy @@ -0,0 +1,40 @@ +package io.emeraldpay.dshackle.testing.trial.mainnet + +import io.emeraldpay.dshackle.testing.trial.Debugger +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification +import spock.lang.Timeout + +@IgnoreIf({ System.getProperty('trialMode') != 'real' }) +class GetBlockSpec extends Specification { + + def client = ProxyClient.ethereumReal() + + def setup() { + Debugger.enabled = false + } + + def cleanup() { + Debugger.enabled = true + } + + @Timeout(15) + def "Correct order for transactions on #height"() { + expect: + def results = [ + (client.execute("eth_getBlockByNumber", ["0x" + Integer.toString(height, 16), false]).result["transactions"] as List), + (client.execute("eth_getBlockByNumber", ["0x" + Integer.toString(height, 16), true]).result["transactions"] as List>) + .collect { it.hash } + ] + + println(results[0]) + println(results[1]) + + results[0] == results[1] + + where: + height << (10_000_000..10_000_500) + + } +} diff --git a/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/rinkeby/CallContractSpec.groovy b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/rinkeby/CallContractSpec.groovy new file mode 100644 index 00000000..193f5226 --- /dev/null +++ b/testing/trial/src/test/groovy/io/emeraldpay/dshackle/testing/trial/rinkeby/CallContractSpec.groovy @@ -0,0 +1,30 @@ +package io.emeraldpay.dshackle.testing.trial.rinkeby + +import io.emeraldpay.dshackle.testing.trial.ProxyClient +import spock.lang.IgnoreIf +import spock.lang.Specification + +@IgnoreIf({ System.getProperty('trialMode') != 'rinkeby' }) +class CallContractSpec extends Specification { + + def client = ProxyClient.ethereumRinkeby() + + def "get block"() { + when: + def act = client.execute(65, "eth_call", + [ + [ + "to" : "0xB8Ba177465b3d696180742c6ba58C408175CB6Dd", + "data": "0x70a08231000000000000000000000000da3f87aa38d07f1fc836873a3b34ec23088ef78a" + ], + "0xc90f1c8c125a4d5b90742f16947bdb1d10516f173fd7fc51223d10499de2a812" + ] + ) + then: + act.id == 65 + act.result != null + act.result == "0x000000000000000000000000000000000000000000000000000000003af9a800" + act.error == null + } + +}